我用了一張 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 ,這是依據顯卡目前的設定來處理,
而這會使得圖片處理的較慢
沒有留言:
張貼留言