在 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 倍以上,所以要畫圖最好用間接的方式 :
Pixels 快上 50 倍以上,所以要畫圖最好用間接的方式 :
Graphics::TBitmap *TheBitmap;
TheBitmap = new Graphics::TBitmap();
TheBitmap->Height = h;
TheBitmap->Width = w;
對 TBitmap 寫值...
Image1->Picture->Bitmap = TheBitmap;
這樣會有較好的執行效率,也可以避免畫面閃爍。
沒有留言:
張貼留言