線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2143
推到 Plurk!
推到 Facebook!

ScanLine 的使用問題

答題得分者是:dllee
arnotsay
一般會員


發表:23
回覆:79
積分:20
註冊:2003-02-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-03-19 16:29:31 IP:61.218.xxx.xxx 未訂閱
請問scanline 可以用 一行一行掃描嗎? 該怎麼用? 我只會用來一列一列掃描....
yannyann
一般會員


發表:8
回覆:20
積分:10
註冊:2003-02-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-03-19 22:21:01 IP:163.28.xxx.xxx 未訂閱
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-03-19 23:26:17 IP:140.135.xxx.xxx 未訂閱
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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-03-20 01:55:30 IP:218.162.xxx.xxx 未訂閱
引言: 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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-03-20 09:23:57 IP:61.220.xxx.xxx 未訂閱
bmp儲存格式是一列一列儲存的,因此scanline()可利用這樣的資料 儲存特性,快速地擷取bmp一列一列的影像資料 根據圖片資料的特性,所以scanline不適用於一行一行掃描
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-03-20 15:00:00 IP:61.231.xxx.xxx 未訂閱
引言: 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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-03-20 15:48:28 IP:140.135.xxx.xxx 未訂閱
非常感謝dllee詳細的說明和指導,讓我又學到寶貴的知識~~~ < >< >
系統時間:2024-11-23 11:32:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!