Sean's Note: [BCB] 三種方法讀取 pixel 中的 RGB

2010年1月16日 星期六

[BCB] 三種方法讀取 pixel 中的 RGB

我用了一張 640x480 的圖片作測試。
// 方法一 : 0.016s
for (int i = 0; i < h; i++)
{
    ptr1 = (Byte*)Image1->Picture->Bitmap->ScanLine[i];

    for (int j = 0; j < w; j++)
    {

      b = ptr1[3*j];
      g = ptr1[3*j+1];
      r = ptr1[3*j+2];
   }

}
// 方法二 : 0.172s
  for (int i = 0; i < h; i++)
    for (int j = 0; j < w; j++)
    {
      color = Image1->Canvas->Pixels[j][i];
      b = (color&0xFF0000) >> 16;
      g = (color&0x00FF00) >> 8;
      r = (color&0x0000FF);
    }

// 方法三 : 0.515s
  for (int i = 0; i < h; i++)
    for (int j = 0; j < w; j++)
    {
      b = GetBValue(Image1->Canvas->Pixels[j][i]);
      g = GetGValue(Image1->Canvas->Pixels[j][i]);
      r = GetRValue(Image1->Canvas->Pixels[j][i]);
    }



結論是,最好是用指標作,要不然就自己切,絕對不要用內建的 GetRValue()  !

後記 :

TheBitmap->PixelFormat = pf32bit;

不論給多少,最好先給值,否則預設為 pfDevice ,這是依據顯卡目前的設定來處理,

而這會使得圖片處理的較慢

沒有留言:

張貼留言