Учитывая Delphi TPicture, содержащий некоторый потомок TGraphic, мне нужно измерить цвет и непрозрачность пикселя.
Я думаю, что у меня должны быть разные реализации для каждого класса, и я думаю, что я покрыл TPngImage. Есть ли поддержка прозрачности в 32-битных растровых изображениях?
Могу ли я решить проблему в более общем виде, чем указано ниже:
procedure GetPixelColorAndTransparency(const Picture: TPicture; X, Y:
Integer; out Color: TColor; out Opacity: Byte);
var
Bmp: TBitmap;
begin
if Picture.Graphic is TPngImage then
begin
Opacity := (TPngImage(Picture.Graphic).AlphaScanline[Y]^)[X];
Color := TPngImage(Picture.Graphic).Pixels[ X, Y ];
end
else
if Picture.Graphic is TBitmap then
begin
Color := Picture.Bitmap.Canvas.Pixels[ X, Y ];
Opacity := 255;
end
else
begin
Bmp := TBitmap.Create;
try
Bmp.Assign(Picture.Graphic);
Color := Bmp.Canvas.Pixels[ X, Y ];
Opacity := 255;
finally
Bmp.Free;
end;
end;
end;