關於ScanLine與Canvas Line的顯示圖檔的問題 |
答題得分者是:arisaka_matsuri
|
timspc
一般會員 ![]() ![]() 發表:3 回覆:3 積分:6 註冊:2007-08-31 發送簡訊給我 |
[code cpp] inline void FindEdge(Graphics::TBitmap* bmp,Graphics::TBitmap* EdgeBitmap,int Threshold_Edge) { Byte *Old,*Up,*Down,*New; int up,left,right,down; int count=0; for(int y=0;y Old = (Byte *) bmp->ScanLine[y]; New = (Byte *) EdgeBitmap->ScanLine[y]; for(int x=0;x { count=0; if (y==0) up=0; else { Up=(Byte *) bmp->ScanLine[y-1]; up = Up[x]-Old[x]; } up = (up>0)?0:abs(up); count =up; if(y==bmp->Height-1) down=0; else { Down=(Byte *) bmp->ScanLine[y 1]; down = Down[x]-Old[x]; } down = (down>0)?0:abs(down); count =down; if (x==0) left=0; else left=Old[x-1]-Old[x]; left = (left>0)?0:abs(left); count =left; if (x==bmp->Width-1) right=0; else right=Old[x 1]-Old[x]; right = (right>0)?0:abs(right); count =right; count/=10; if(count>Threshold_Edge)New[x]=55; //edge gray level set black else New[x]=235; } } } [/code] 這是我寫的一個偵測邊界的副程式 bmp 將主程式其中的一個image元件丟進來 其中這個元件是顯示處理前的圖片 EdgeBitmap 將主程式另一個image元件丟進來 其中這個元件是要顯示出我要處理完成後的圖片 但是很奇怪的是我直接 想在最後2行 因為之前都是直接給0或255(邊界或背景) 顯示都很正常也都是黑白圖像 但就在最近意外發現 如果給不是0或255 而是直接給0~255中間一值是顯示出來的卻是一個彩色的圖 但是我在主程式中也有設定該元件的長寬與bit數 我處理的是8bit的圖 請問大大是我這樣的用法錯誤了嗎 ---------------------------------------------------------------------------------------------------------------------------------- 我原本的目的是想要將原始圖片的部分pixel讀到新檔裡面 剛剛有查了一下書籍 有說到canvas->Pixels的指令 請問我要讀一個pixel的灰階值直接使用是要用上面哪個指令嗎 還是其實scanline也是可以但是還要經過一層轉換 我原本想說會不會是讀到的是他的ASCII code(不確定是不是這樣拼) 然後寫入的時候又將讀到的ASCII code的數字當成要存的數字 所以會造成影像顯示的錯誤 請問有大大知道其原因嗎 編輯記錄
timspc 重新編輯於 2007-10-23 15:45:55, 註解 無‧
|
arisaka_matsuri
高階會員 ![]() ![]() ![]() ![]() 發表:25 回覆:205 積分:231 註冊:2003-10-19 發送簡訊給我 |
你好,大概只能猜到兩個原因
第一個是處理8bit灰階影像的調色盤沒有設定好的問題 8bit調色盤的問題?? 第二個原因,可能跟輸出的Timage物件的TBitmap物件的格式設定不正確有關係 如何判斷PixelFormat為pfDevice時是什麼樣的圖? 提供給你參考看看:) |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |