TGPBitmap 提供 GetPixel/SetPixel 直接讀寫像素,雖速度較慢但適合原型開發、小尺寸影像處理。本文示範五大操作:基本複製、水平鏡像、垂直鏡像、左至右透明度漸層、載入系統 ICO 圖示。
var g: TGPGraphics; bit: TGPBitmap;
begin
g := TGPGraphics.Create(Canvas.Handle);
bit := TGPBitmap.Create('c:\temp\x.jpg');
g.DrawImage(bit, 11, 11, bit.GetWidth, bit.GetHeight); // 1:1
g.DrawImage(bit, 11, 11, bit.GetWidth*0.5, bit.GetHeight*0.5); // 1:2
bit.Free; g.Free;
end;
for row := 0 to height-1 do
for col := 0 to width-1 do begin
bit1.GetPixel(col, row, color);
bit2.SetPixel(col, row, color);
end;
bit2.SetPixel(width - col, row, color); // X 鏡像
bit2.SetPixel(col, height - row, color); // Y 鏡像
color := MakeColor(255 * col div width, GetRed(color), GetGreen(color), GetBlue(color));
bit2.SetPixel(col, row, color);
var ico: HICON; bit: TGPBitmap;
begin
ico := LoadIcon(0, IDI_QUESTION); // 系統問號圖示
bit := TGPBitmap.Create(ico);
g.DrawImage(bit, 10, 10);
bit.Free;
end;
GetPixel/SetPixel 為非托管呼叫,大量像素操作極慢。BitmapData.LockBits/UnlockBits 取得記憶體指標,配合 MoveMemory 或指標運算批次處理。GetPixel/SetPixel 批次版本 (陣列參數)。像素操作是影像處理基礎,掌握座標轉換邏輯即可實現鏡像、旋轉、扭曲等幾何變換。