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

為何使用ScanLine+指標,會使得圖片反轉?

 
kiroru
一般會員


發表:1
回覆:1
積分:0
註冊:2006-10-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-10-19 19:11:09 IP:61.56.xxx.xxx 未訂閱
想請教一下,小弟寫了個簡單的程式如下,
主要是將Bmp元件裡的圖複製到Image2上面顯示,
我故意只用了一個指標,讓它指向Image2->Picture->Bitmap->ScanLine[i],
之後利用GetRValue(Bmp->Canvas->Pixels[i][j]); .......... 方式抓出Bmp裡的每個pixel的RGB值,
再assign給Image2,可是出來的結果,Image2上的圖片是逆時針90度旋轉,並且左右相反,
覺得很納悶,難道說Pixels[i][j]代表的位置,其實是在( j , i )這個位置?
懇請解惑,非常感謝!


unsigned int r,g,b;

Image2->Height=Bmp->Height;
Image2->Width=Bmp->Width;
Image2->Picture->Bitmap->Height=Bmp->Height;
Image2->Picture->Bitmap->Width=Bmp->Width;
Image2->Picture->Bitmap->PixelFormat=pf24bit;
Byte *ptr;
for(int i=0;iHeight;i )
{
ptr=(Byte*)Image2->Picture->Bitmap->ScanLine[i];
for(int j=0;jWidth;j )
{
ptr[3*j 2]=GetRValue(Bmp->Canvas->Pixels[i][j]);
ptr[3*j 1]=GetGValue(Bmp->Canvas->Pixels[i][j]);
ptr[3*j ]=GetBValue(Bmp->Canvas->Pixels[i][j]);
}
}
justdo
高階會員


發表:2
回覆:359
積分:222
註冊:2004-08-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2006-10-19 22:09:57 IP:59.105.xxx.xxx 未訂閱
Pixels[i][j] 的確是在 (i, j)上面,但注意的是,i是在x軸、j在y軸上,而你的程式中,i是在y軸上、j在x軸上,所以應該寫成 Pixels[j][i]
kiroru
一般會員


發表:1
回覆:1
積分:0
註冊:2006-10-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2006-10-20 06:36:47 IP:61.56.xxx.xxx 未訂閱
我大概了解了,
Pixels[i][j]其實指的是座標( i , j )的位置,
而不是Array[ i ][ j ]的位置,是吧?
例如Pixel[ 3 ][ 1 ]以Array的觀點來看,
是在第三行第一列,也就是Array[1][3] ..
系統時間:2024-05-03 21:39:55
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!