Api GDI+;如何查询像素
我正在使用Delphi6的GDI+库 我使用Api GDI+;如何查询像素,api,delphi,graphics,gdi+,Api,Delphi,Graphics,Gdi+,我正在使用Delphi6的GDI+库 我使用TGPImage.Create(AFilename)加载了一个图像 问题是,如何查询单个像素(RGBA值)?对象TGPImage似乎没有类似的内容。库中的文档仅链接到GDI+的Microsoft文档,目前该链接已断开 PS:我可以使用 TGPGraphics.Create(PaintBox1.Canvas.Handle).DrawImage(Image,GPRect(ALeft,top,AWidth,ahheight)) 但是我不知道这是否有用,因为我
TGPImage.Create(AFilename)
加载了一个图像
问题是,如何查询单个像素(RGBA值)?对象TGPImage似乎没有类似的内容。库中的文档仅链接到GDI+的Microsoft文档,目前该链接已断开
PS:我可以使用
TGPGraphics.Create(PaintBox1.Canvas.Handle).DrawImage(Image,GPRect(ALeft,top,AWidth,ahheight))代码>
但是我不知道这是否有用,因为我只需要查询像素,而不需要绘制整个图片。您可以借用TGPBitmap
类中的GetPixel
方法,该方法仅用于获取像素颜色。要实现此方法,需要对原始TGPImage
类进行子类化,以访问受保护的NativeImage
字段(保持指向对象的指针)
以下是使用interposer类的示例:
uses
GDIPAPI, GDIPOBJ;
type
// we need to subclass the TGPImage to access the protected NativeImage field
TGPImage = class(GDIPOBJ.TGPImage)
public
function GetPixel(X, Y: Integer; out Color: TGPColor): TStatus;
end;
implementation
{ TGPImage }
function TGPImage.GetPixel(X, Y: Integer; out Color: TGPColor): TStatus;
begin
Result := SetStatus(GdipBitmapGetPixel(GPBITMAP(NativeImage), X, Y, Color));
end;
从TGPBitmap
类中借来的应该可以做你想做的事情。我在一些项目中使用了GR32,但是对于这个项目,它严重失败,因为PNG透明度支持不好。GDI+工作完美且简单。我可以使用TBitmap或TBitmap32(来自GR32)来查询像素,但我想正确地支持PNG等格式,因为我已经使用了GDI+,如果我可以使用现有的解决方案来查询像素,那就太好了。我不得不说,这让我感到惊讶了。不管怎么说,GDI+有很好的文档记录没有?@TLama:非常感谢您提供这段代码。它起作用了!这也是在Delphi 6中使用类助手的一种有趣方法;-)当然,它需要转换到“new”TGPImage
,但这没有问题,因为没有添加任何字段。你们能把它作为答案发布吗?它不是一个类助手,它是一个被称为中介类的类