TGraphic子孫を含むDelphi TPictureがあるので、ピクセルの色と不透明度を計算する必要があります。 私はクラスごとに異なる実装が必要だと思うし、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;
TGraphicのすべての子孫が部分(> 1bit)透過性をサポートしているわけではないため、本当に一般的なケースは存在しません。 – OnTheFly
はい、32ビットのビットマップにアルファチャンネルがあります。以下の回答を参照してください。 –