全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2344
推到 Plurk!
推到 Facebook!

關於ScanLine與Canvas Line的顯示圖檔的問題

答題得分者是:arisaka_matsuri
timspc
一般會員


發表:3
回覆:3
積分:6
註冊:2007-08-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-10-23 15:45:00 IP:140.113.xxx.xxx 訂閱

[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;yHeight;y ){
Old = (Byte *) bmp->ScanLine[y];
New = (Byte *) EdgeBitmap->ScanLine[y];
for(int x=0;xWidth;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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-10-24 02:28:28 IP:140.113.xxx.xxx 訂閱
你好,大概只能猜到兩個原因
第一個是處理8bit灰階影像的調色盤沒有設定好的問題
8bit調色盤的問題??
第二個原因,可能跟輸出的Timage物件的TBitmap物件的格式設定不正確有關係
如何判斷PixelFormat為pfDevice時是什麼樣的圖?
提供給你參考看看:)
系統時間:2024-04-25 15:11:27
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!