2010-03-12 19 views

回答

6

它应该是相同的:

function TCanvas.GetPixel(X, Y: Integer): TColor; 
begin 
    RequiredState([csHandleValid]); 
    GetPixel := Windows.GetPixel(FHandle, X, Y); 
end; 
4

如果你正在寻找的东西,执行比GetPixel/Canvas.Pixel []你应该看看Bitmap.ScanLine。唯一麻烦的是数据可能以多种方式排列,由Bitmap.PixelFormat确定。

0

GetPixel函数是非常慢很慢!如果您需要较高(甚至可接受)的性能,则应使用ScanLine属性。 ScanLine [y]是指向位图中第y行像素的指针,以PixelFormat属性指定的格式编码。例如,对于一个24位位图,所述线具有格式

B1 G1 R1 G2 B2 R2,...,BN GN Rn中

如果位图的宽度为Ñ。 Bi,Gi和Ri分别是像素的蓝色,绿色和红色像素的强度,其中像素为i

+0

请问我的论点有什么问题? – 2010-03-12 14:40:05

+0

@Ritsaert:你确定吗?我刚刚创建了一个填充(R,G,B)=(0xFF,0,0)的小BMP文件并在内存中查看它。请参阅http://privat.rejbrand.se/hex.png。突出显示的字节是第一条扫描线的第一个字节。对我来说,它确实看起来像字节去BBGGRRBBGGRR ... – 2010-03-12 15:23:43

+0

我很惭愧。你是对的。 24位位图的格式为BGR顺序。 – 2010-03-12 15:45:14