// 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;


 

Zugriffe seit 6.9.2001 auf Delphi-Ecke