Sean's Note: [BCB] TImage 和 TBitmap

2009年11月2日 星期一

[BCB] TImage 和 TBitmap

在 BCB 裡,讀取 TImage 的像素和 TBitmap 的像素時間是差不多的,
但是寫入的時間卻是差很多,我用四種方法對同一個位置寫了 100000 次,

// 執行時間: 0.125s
for (int i = 0; i < 100000; i++)
  TheBitmap->Canvas->Pixels[0][0] = TColor(RGB(0, 0, 0));


// 執行時間: 0.125s
for (int i = 0; i < 100000; i++)
  TheBitmap->Canvas->Pixels[0][0] = clBlack;


// 執行時間: 0.969s
for (int i = 0; i < 100000; i++)
  Image1->Canvas->Pixels[0][0] = TColor(RGB(0, 0, 0));

// 執行時間: 0.969s
for (int i = 0; i < 100000; i++)
  Image1->Picture->Bitmap->Canvas->Pixels[0][0] = TColor(RGB(0, 0, 0));


結果發現,TBitmap 的寫入時間較快,此外搭配 ScanLine[] 和指標會比直接設
Pixels 快上 50 倍以上,所以要畫圖最好用間接的方式 :

Graphics::TBitmap *TheBitmap;
TheBitmap = new Graphics::TBitmap();
TheBitmap->Height = h;
TheBitmap->Width = w;

對 TBitmap 寫值...

Image1->Picture->Bitmap = TheBitmap;

這樣會有較好的執行效率,也可以避免畫面閃爍。

沒有留言:

張貼留言