Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Api GDI+;如何查询像素_Api_Delphi_Graphics_Gdi+ - Fatal编程技术网

Api 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)) 但是我不知道这是否有用,因为我

我正在使用Delphi6的GDI+库

我使用
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
,但这没有问题,因为没有添加任何字段。你们能把它作为答案发布吗?它不是一个类助手,它是一个被称为中介类的类