2009年11月25日 星期三

HW4













其實上上星期上課的時候就懂用fopen去讀整張圖的RGB組成 然後印在image上的觀念


但是fseek(imBMP,offset,SEEK_SET)


和 Image1->Canvas->Pixels[j][i]=(TColor)RGB(R,G,B)

這兩行程式讓我很無法理解,嘗試很多不同方法才找到解法

(1)首先fseek那邊最大的問題出在offset的設置一開始我用for迴圈從54開始跑,每跑完一次就執行offset+=6;範圍設<=圖長*寬+54,因為我以為fread(bsize,1,6,imBMP)是代表一點RGB占掉6個位元組,但發現這完全不對,後來找到問題是因為圖片每一點的RGB組成是由3個位元組來定義,所以正確的設置for迴圈是要讀取到一點RGB後,offset+=3,範圍設<=圖的長*寬*3+54才正確,往後才可以正確讀取到下一點RGB

(2)而第二個問題是Pixels[j][i], i 和 j 的設定,我只知道BCB的點和VC的行列剛好顛倒,但實際去描點的時候發現圖會整張呈現非常詭異的情況











就只能說跟我想像的完全不一樣,老實說我也不懂問題出在哪,最後是看著圖想像程式碼的執行狀況去修改 i , j 的值 (這樣講好像有點豪洨..) 不過我真的不懂BCB她是怎麼描點的 希望這部分老師可以詳細講解 , 因為我設定的數值就是跟圖完全相反的方向(也就是跟我以為正常的方向相反)就好像是倒過來描的(不好意思 我不太會解釋)

這次程式可以說我是碰巧打出來的... 因為我也不太懂為什麼這樣會正確,另外還有一點,我描出來後圖會有色差 不知道在網路上PO圖看不看得出來,這點我也不知道怎麼解釋,希望老師可以就這幾個來解釋 感謝!!

-----------------------------------------------------------
09.11.26更新
-----------------------------------------------------------

今天上課的時候問完老師大概懂問題出在哪了!!


問題1.原來fread(bSize,1,6,imBMP)我根本讀錯了,RGB只有三個bytes,
改成fread(bSize,1,3,imBMP)就對囉!!也解決色差的問題 happy~~




問題2.為什麼圖顯示出來會整個顛倒?? 老師說圖檔的RGB會有兩種存放的方式 一種是從前面開始放,另一種是從後面開始放,所以不是描點的問題,是BMP檔她裡面本來就會有不同的存放方式


終於解決了昨天的兩個問題 不過今天發現另一個問題!!!





我讀取了三張圖檔 第一張最大(下面露出馬腳) 第二張中等覆蓋在第一張上面
第三張是左上的小紅傘
我嘗試過修改掉這個小缺點,我拉了一個Button 來做delete Image1的功能
按下去後圖檔確實會消失,但當我再次讀取圖檔的時候發生了下列的錯誤!!
然後指向Image1->Cavas->Pixels[i][j]....的這行程式碼(此為描點的程式碼)
希望老師或同學能告訴我問題出在哪,希望能解決圖檔重疊的問題

沒有留言:

張貼留言