Einzelnen Beitrag anzeigen

Benutzerbild von Sherlock
Sherlock
Online

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.764 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: GDI+ Bilddrehung mit Transparenz

  Alt 27. Feb 2019, 11:21
Hier mal eine Alternative zu GDI+, die ich persönlich übersichtlicher finde: WIC.

Delphi-Quellcode:
uses ...., Vcl.Graphics, Winapi.Wincodec

procedure TForm24.Button1Click(Sender: TObject);
var
  myOriginal : TWICImage;
  myRotate : IWICBitmap;
  iDecoder : IWICBitmapDecoder;
  iDecoderFrame: IWICBitmapFrameDecode;
  iFlipRotator : IWICBitmapFlipRotator;
  hres : HRESULT;
  myFile : string;
begin
  myFile := '..\..\testpilot-header.png';
  myOriginal := TWICImage.Create;
  try
    myOriginal.LoadFromFile(myFile);
    hres := myOriginal.ImagingFactory.CreateDecoderFromFilename(PWideChar(myFile), GUID_NULL, GENERIC_READ,
      WICDecodeMetadataCacheOnDemand, iDecoder);
    if Succeeded(hres) then
    begin
      hres := iDecoder.GetFrame(0, iDecoderFrame);
      if Succeeded(hres) then
      begin
        hres := myOriginal.ImagingFactory.CreateBitmapFlipRotator(iFlipRotator);
        if Succeeded(hres) then
        begin
          hres := iFlipRotator.Initialize(iDecoderFrame, WICBitmapTransformRotate90);
          if Succeeded(hres) then
          begin
            myOriginal.ImagingFactory.CreateBitmapFromSource(iFlipRotator, WICBitmapCacheOnDemand, myRotate);
            if Assigned(myRotate) then
            begin
              myOriginal.Handle := myRotate;
              myOriginal.SaveToFile('../../rotated.png');
            end;
          end;
        end;
      end;
    end;
  finally
    myOriginal.Free;
  end;
end;
Da muss sicherlich noch irgendwie etwas aufgeräumt werden. Aber es läuft.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann

Geändert von Sherlock (28. Feb 2019 um 06:51 Uhr) Grund: eine Variable war doch nicht überflüssig
  Mit Zitat antworten Zitat