用 Pixels[x][y] 繪點速度太慢, 改用ScanLine 我們可以利用 TCanvas.Pixels 屬性來存取畫布上的任一點的顏色, 例如: Canvas.Pixels[10][10] = clYellow; 當你覺得此種繪點的方式太慢而無法接受時, 你可以採用 TBitmap.ScanLine, 其在繪點的速度上有非常明顯的差異。 ScanLine, 顧名思義即一條水平掃描線, 它其實是一個泛型指標, 指向某條線 的第一個點的位址, 其原型為: property ScanLine[Row: Integer]: Pointer; ScanLine 只適用於 DIB 圖形, 它與 TBitmap.PixelFormat 屬性有直接的 關係, 當 PixelFormat 為 pf8Bit 時, ScanLine[y] 上的每一個像點佔 1 byte, 當 PixelFormat 為 pf24Bit 時, 每一個像點佔 3 bytes。 以下示範 ScanLine 的用法: procedure TForm1.Button1Click(Sender: TObject); var x,y : integer; BitMap : TBitMap; P : PByteArray; begin BitMap := TBitMap.create; try BitMap.HandleType := bmDIB; BitMap.PixelFormat := pf24Bit; BitMap.Width := 256; BitMap.Height := 240; for y := 0 to BitMap.Height-1 do begin P := BitMap.ScanLine[y]; for x := 0 to BitMap.Width-1 do begin // 注意下面 RGB 的設定順序 P[x*3+0] := y; // 設定 B P[x*3+1] := 40; // 設定 G P[X*3+2] := 40; // 設定 R end; end; Canvas.draw(0, 0, BitMap); finally BitMap.free; end; end;