GDI+ как запросить пиксель


Я использую библиотеку GDI+ для Delphi 6 по progdigy.com .

Я загрузил изображение с помощью TGPImage.Create(AFilename).

Вопрос в том, как я могу запросить один пиксель (значения RGBA)? Объект TGPImage, похоже, не имеет ничего подобного. Документация в библиотеке ссылается только на документацию Microsoft GDI+, которая к настоящему времени не работает.

PS: я могу нарисовать изображение с помощью

TGPGraphics.Create(PaintBox1.Canvas.Handle).DrawImage(Image, GPRect(ALeft, ATop, AWidth, AHeight));

Но я не знаю, поможет ли это, так как мне нужно запросить только пикселы без необходимости рисовать всю картину.

1   2   2014-08-13 00:18:01

1 ответ:

Вы можете позаимствовать метод GetPixel из класса TGPBitmap, который используется только для получения цветов пикселей. Чтобы реализовать этот метод, вам нужно будет подклассировать исходный класс TGPImage, чтобы получить доступ к защищенному полю NativeImage (удерживая указатель на Image объект).

Вот пример использования класса 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;