// Wenn man
feststellen möchte, ob ein
TWICImage
transparent
// ist, reicht eine einfache Anfrage (siehe Button1click)
// nicht aus. Allerdings darf man sich nicht verwirren lassen,
// falls man keine Transparenz sieht, aber trotzdem eine
// ermittelt wird. Es reicht ja theoretisch ein einzelnes,
// transparentes Pixel aus, oder vielleicht auch eine Farbe,
// die gar nicht im Bild auftaucht.
// Getestet mit RS 10.4 unter Win11
uses
Wincodec;
var
Source: IWICBitmapSource;
WFormat: WICPixelFormatGUID;
Function isTransparent(wicImg: TWICImage): Boolean;
begin
Source := wicImg.Handle as IWICBitmapSource;
Source.GetPixelFormat(WFormat);
Result := (GUID_WICPixelFormat32bppBGRA = WFormat) or
(GUID_WICPixelFormat32bppPBGRA = WFormat) or
(GUID_WICPixelFormat64bppRGBA = WFormat) or
(GUID_WICPixelFormat64bppPRGBA = WFormat) or
(GUID_WICPixelFormat64bppRGBAFixedPoint = WFormat) or
(GUID_WICPixelFormat40bppCMYKAlpha = WFormat) or
(GUID_WICPixelFormat80bppCMYKAlpha = WFormat) or
(GUID_WICPixelFormat128bppRGBAFloat = WFormat) or
(GUID_WICPixelFormat128bppPRGBAFloat = WFormat);
end;
// Beispielaufrufe
procedure TForm1.Button1Click(Sender: TObject);
var
WIC: TWICImage;
begin
WIC := TWICImage.Create;
WIC.LoadFromFile('D:\Bilder\Maus.png');
if WIC.Transparent then // --- funktioniert nicht ---
showmessage('it is')
else
showmessage('it is not');
FreeAndNil(WIC);
end;
// sondern:
procedure TForm1.Button2Click(Sender: TObject);
var
WIC: TWICImage;
begin
WIC := TWICImage.Create;
WIC.LoadFromFile('D:\Bilder\Maus.png');
if isTransparent(WIC) then
showmessage('it is')
else
showmessage('it is not');
FreeAndNil(WIC);
end;
|