ScanLine 的使用問題 |
答題得分者是:dllee
|
arnotsay
一般會員 發表:23 回覆:79 積分:20 註冊:2003-02-03 發送簡訊給我 |
|
yannyann
一般會員 發表:8 回覆:20 積分:10 註冊:2003-02-17 發送簡訊給我 |
taishyang你好,我認為你的作法應該不行...
以下是我by column掃瞄的方法...
void __fastcall TForm1::Button1Click(TObject *Sender) { Image1->Picture->LoadFromFile("d:\\test.bmp"); for (int x=0;x< Image1->Width*3;x =3) { for (int y=0;y< Image1->Height;y ) { Byte *ptr=(Byte *)Image1->Picture->Bitmap->ScanLine[y]; Byte Gray; Gray=(ptr[x] ptr[x 1] ptr[x 2])/3; ptr[x]=ptr[x 1]=ptr[x 2]=Gray; } } Image1->Invalidate(); }發表人 - yannyann 於 2003/03/19 22:21:59 |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
yannyann您好:
感謝您的指正< >< >
可是執行會有錯誤訊息耶...
所以我改成下面這樣
Graphics::TBitmap *Bmp = new Graphics::TBitmap(); Bmp->LoadFromFile("d:\\test.bmp"); for (int x=0;x< Bmp->Width*3;x =3) { for (int y=0;y< Bmp->Height;y ) { Byte *ptr=(Byte *)Bmp->ScanLine[y]; Byte Gray; Gray=(ptr[x] ptr[x 1] ptr[x 2])/3; ptr[x]=ptr[x 1]=ptr[x 2]=Gray; } } Image1->Picture->Assign(Bmp); delete Bmp;順心 發表人 - taishyang 於 2003/03/19 23:27:35 |
arnotsay
一般會員 發表:23 回覆:79 積分:20 註冊:2003-02-03 發送簡訊給我 |
引言: taishyang你好,我認為你的作法應該不行... 以下是我by column掃瞄的方法... [code] void __fastcall TForm1::Button1Click(TObject *Sender) { Image1->Picture->LoadFromFile("d:\\test.bmp"); for (int x=0;x< Image1->Width*3;x =3) { for (int y=0;y< Image1->Height;y ) { Byte *ptr=(Byte *)Image1->Picture->Bitmap->ScanLine[y];for (int y=0;y< Image1->Height;y ) {Byte *ptr=(Byte *)Image1->Picture->Bitmap->ScanLine[y];} 為什麼這行可以看成是掃直得呢? scanline 為什麼知道該掃橫的還是該掃直的? 難道scanline是依照scanline中是 >中就不能用其他變數了嗎? |
JerryKuo
版主 發表:42 回覆:571 積分:322 註冊:2003-03-10 發送簡訊給我 |
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
引言: for (int y=0;y< Image1->Height;y ) {Byte *ptr=(Byte *)Image1->Picture->Bitmap->ScanLine[y];} 為什麼這行可以看成是掃直得呢? scanline 為什麼知道該掃橫的還是該掃直的? 難道scanline是依照scanline中是 >中就不能用其他變數了嗎? >>< face="Verdana, Arial, Helvetica"> 說真的,如果 scanline 可以按變數名稱的不同 [x] 或 [y] 甚至是 [t] 而有不一樣的反應,那可能沒人敢用它了 就如同 class="code"> Provides indexed access to each line of pixels. __property void * ScanLine[int Row] = {read=GetScanline}; Description ScanLine is used only with DIBs (Device Independent Bitmaps) for image editing tools that do low-level pixel work. 可以很明顯地看出是以 Row 為單位來存取的。 如果您要以 Column 為單位來存取,那就只能同時存取多個 ScanLine。 大部分影像作業或工業應用都只用灰階(8bit)處理,此時, Byte GreyOnRowColumn=((Byte*)pBmp->ScanLine[Row])[Column]; 就表示圖上 (Row,Column) 座標上的灰階值。 沒空更新的網頁... http://big5.to/吃軟也吃硬 C及指標教學,計算機概論,資訊管理導論... http://home.kimo.com.tw/dllee.tw http://coolsite.to/ushells 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |