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

小弟有一份程式想轉為scanline做法,請教高手

尚未結案
fxk555
一般會員


發表:1
回覆:0
積分:0
註冊:2004-12-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-05 22:47:59 IP:61.59.xxx.xxx 未訂閱
小弟有一部分程式如下: /*unsigned char r, g, b, ht, wh, R1, G2, B3; Screen->Cursor = crHourGlass; wh = Image2->Width; ht = Image2->Height; for (int Y=0;Y<520;Y ) { for (int X=0;X<520;X ) { R1=filter[0]*GetRValue(Image2->Picture->Bitmap->Canvas->Pixels[X-1][Y-1]) filter[1]*GetRValue(Image2->Picture->Bitmap->Canvas->Pixels[X][Y-1]) filter[2]*GetRValue(Image2->Picture->Bitmap->Canvas->Pixels[X 1][Y-1]) filter[3]*GetRValue(Image2->Picture->Bitmap->Canvas->Pixels[X-1][Y]) filter[4]*GetRValue(Image2->Picture->Bitmap->Canvas->Pixels[X][Y]) filter[5]*GetRValue(Image2->Picture->Bitmap->Canvas->Pixels[X 1][Y]) filter[6]*GetRValue(Image2->Picture->Bitmap->Canvas->Pixels[X-1][Y 1]) filter[7]*GetRValue(Image2->Picture->Bitmap->Canvas->Pixels[X][Y 1]) filter[8]*GetRValue(Image2->Picture->Bitmap->Canvas->Pixels[X 1][Y 1]); if (R1>255) R1=255; if (R1<0) R1=0; G2=filter[0]*GetGValue(Image2->Picture->Bitmap->Canvas->Pixels[X-1][Y-1]) filter[1]*GetGValue(Image2->Picture->Bitmap->Canvas->Pixels[X][Y-1]) filter[2]*GetGValue(Image2->Picture->Bitmap->Canvas->Pixels[X 1][Y-1]) filter[3]*GetGValue(Image2->Picture->Bitmap->Canvas->Pixels[X-1][Y]) filter[4]*GetGValue(Image2->Picture->Bitmap->Canvas->Pixels[X][Y]) filter[5]*GetGValue(Image2->Picture->Bitmap->Canvas->Pixels[X 1][Y]) filter[6]*GetGValue(Image2->Picture->Bitmap->Canvas->Pixels[X-1][Y 1]) filter[7]*GetGValue(Image2->Picture->Bitmap->Canvas->Pixels[X][Y 1]) filter[8]*GetGValue(Image2->Picture->Bitmap->Canvas->Pixels[X 1][Y 1]); if (G2>255) G2=255; if (G2<0) G2=0; B3=filter[0]*GetBValue(Image2->Picture->Bitmap->Canvas->Pixels[X-1][Y-1]) filter[1]*GetBValue(Image2->Picture->Bitmap->Canvas->Pixels[X][Y-1]) filter[2]*GetBValue(Image2->Picture->Bitmap->Canvas->Pixels[X 1][Y-1]) filter[3]*GetBValue(Image2->Picture->Bitmap->Canvas->Pixels[X-1][Y]) filter[4]*GetBValue(Image2->Picture->Bitmap->Canvas->Pixels[X][Y]) filter[5]*GetBValue(Image2->Picture->Bitmap->Canvas->Pixels[X 1][Y]) filter[6]*GetBValue(Image2->Picture->Bitmap->Canvas->Pixels[X-1][Y 1]) filter[7]*GetBValue(Image2->Picture->Bitmap->Canvas->Pixels[X][Y 1]) filter[8]*GetBValue(Image2->Picture->Bitmap->Canvas->Pixels[X 1][Y 1]); if (B3>255) B3=255; if (B3<0) B3=0; Image1->Picture->Bitmap->Canvas->Pixels[X][Y]=RGB(R1,G2,B3); } } 請教高手,如何轉為scanline寫法呢?或小弟是做能夠控制濾波器大小,與數值的影像低通濾波器,是否有完整範例能供參考?眼見專題發表日期將近,懇請各位高手幫忙,感激不盡! 發表人 -
1666362
初階會員


發表:66
回覆:124
積分:43
註冊:2004-07-07

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-05 23:10:58 IP:210.192.xxx.xxx 未訂閱
下面這段SOURCE CODE 您參考看看  
先宣告全域變數  p1[520][520]    void __fastcall TForm1::LPFClick(TObject *Sender)
{
 Graphics::TBitmap *Bmp = new Graphics::TBitmap();
 Byte *ptr;
 Bmp->Assign(Image1->Picture->Bitmap );
 Bmp->PixelFormat=pf24bit;     for (int i=0;iHeight;i   )
 {
  ptr=(Byte*)Bmp->ScanLine[i];
  for (int j=0;jWidth; j   )
  {
   p1[j][i]=ptr[j*3];
  }
 }
 for (int i=0;iHeight;i   )
 {
  ptr=(Byte*)Bmp->ScanLine[i];
  for (int j=0;jWidth; j   )
  {
   ptr[j*3]=Filter(j,i);   B
   ptr[j*3 1]=Filter(j,i); G
   ptr[j*3 2]=Filter(j,i); R
   <-----這邊加入您要的判斷 RGB>255,RGB=255;RGB<0,RGB=0
  }
 }
 Image2->Stretch = true;
 Image2->Picture->Assign(Bmp);
 delete Bmp;
}
//---------------------------------------------------------------------------
int __fastcall TForm1::LPFFilter(int i,int j)
{
int LPF;
 int p[10];
 p[1]=p1[i-1][j-1];
 p[2]=p1[i][j-1];
 p[3]=p1[i 1][j-1];
 p[4]=p1[i-1][j];
 p[5]=p1[i][j];
 p[6]=p1[i 1][j];
 p[7]=p1[i-1][j 1];
 p[8]=p1[i][j 1];
 p[9]=p1[i 1][j 1];     LPF=(p[1] p[2] p[3] p[4] p[5] p[6] p[7] p[8] p[9])/9;<---把這裡改成您要的運算     if (LPF<0)
 LPF=(-1)*LPF;
 return (LPF);
} 
我是新手 多多指教 ^^ 發表人 - 1666362 於 2004/12/05 23:18:08
1666362
初階會員


發表:66
回覆:124
積分:43
註冊:2004-07-07

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-05 23:21:23 IP:210.192.xxx.xxx 未訂閱
或者您參考 richtop 大作 http://delphi.ktop.com.tw/loadfile.php?TOPICID=15162985&CC=339115 我是新手 多多指教 ^^
JerryKuo
版主


發表:42
回覆:571
積分:322
註冊:2003-03-10

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-07 09:33:51 IP:220.135.xxx.xxx 未訂閱
引言: 小弟有一部分程式如下: /*unsigned char r, g, b, ht, wh, R1, G2, B3; Screen->Cursor = crHourGlass; wh = Image2->Width; ht = Image2->Height; for (int Y=0;Y<520;Y ) { for (int X=0;X<520;X ) { R1=filter[0]*GetRValue(Image2->Picture->Bitmap->Canvas->Pixels[X-1][Y-1]) filter[1]*GetRValue(Image2->Picture->Bitmap->Canvas->Pixels[X][Y-1]) filter[2]*GetRValue(Image2->Picture->Bitmap->Canvas->Pixels[X 1][Y-1]) filter[3]*GetRValue(Image2->Picture->Bitmap->Canvas->Pixels[X-1][Y]) filter[4]*GetRValue(Image2->Picture->Bitmap->Canvas->Pixels[X][Y]) filter[5]*GetRValue(Image2->Picture->Bitmap->Canvas->Pixels[X 1][Y]) filter[6]*GetRValue(Image2->Picture->Bitmap->Canvas->Pixels[X-1][Y 1]) filter[7]*GetRValue(Image2->Picture->Bitmap->Canvas->Pixels[X][Y 1]) filter[8]*GetRValue(Image2->Picture->Bitmap->Canvas->Pixels[X 1][Y 1]); 請教高手,如何轉為scanline寫法呢?或小弟是做能夠控制濾波器大小,與數值的影像低通濾波器,是否有完整範例能供參考?眼見專題發表日期將近,懇請各位高手幫忙,感激不盡! < face="Verdana, Arial, Helvetica"> fxk555你好: 請用下面的方式發表程式或修改, [code] // BCB, Delphi 的程式碼 [/code]
系統時間:2024-05-21 3:15:16
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!