Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi nach StretchBlt schwarzer Hintergrund (https://www.delphipraxis.net/184052-nach-stretchblt-schwarzer-hintergrund.html)

Sherlock 26. Feb 2015 12:16

AW: nach StretchBlt schwarzer Hintergrund
 
Ich skaliere nur noch mit dem http://docwiki.embarcadero.com/VCL/X...hics.TWICImage.

Beispiel einer proportionalen Skalierung:
Delphi-Quellcode:
procedure ResizeImage(aWICImage: TWICImage; NewWidth:Integer);
var
  scale: IWICBitmapScaler;
  wicBitmap: IWICBitmap;
  newHeight:Integer;
  faktor:Double;
begin
  if Assigned(aWICImage) then
  begin
    faktor := NewWidth / aWICImage.Width;
    newHeight := Round(aWICImage.Height * faktor);

    aWICImage.ImagingFactory.CreateBitmapScaler(scale);
    scale.Initialize(aWICImage.Handle, NewWidth, NewHeight, WICBitmapInterpolationModeFant);
    aWICImage.ImagingFactory.CreateBitmapFromSourceRect(scale, 0,0,NewWidth, NewHeight, wicBitmap);
    if Assigned(wicBitmap) then
      aWICImage.Handle := wicBitmap;
  end;
end;
Sherlock

Helmi 26. Feb 2015 13:45

AW: nach StretchBlt schwarzer Hintergrund
 
Zitat:

Zitat von Sherlock (Beitrag 1291613)

Gut regergiert, Sherlock! 8-)

eine interessante Funktion

Ich hab das mal für normale Bitmaps (testweise) umgestrickt:

Delphi-Quellcode:
procedure ResizeImage(Bitmap: TBitmap; NewWidth:Integer);
var
  WICImage : TWICImage;
  WICBitmap: IWICBitmap;
  scale   : IWICBitmapScaler;
  newHeight: Integer;
  faktor  : Double;

begin
  If not Assigned(Bitmap) then
    exit;

  WICImage := TWICImage.Create;

  WICImage.Assign(Bitmap);

  try
    faktor   := NewWidth / WICImage.Width;
    newHeight := round(WICImage.Height * faktor);

    WICImage.ImagingFactory.CreateBitmapScaler(scale);

    scale.Initialize(WICImage.Handle, NewWidth, NewHeight, WICBitmapInterpolationModeFant);

    WICImage.ImagingFactory.CreateBitmapFromSourceRect(scale, 0,0,NewWidth, NewHeight, WICBitmap);

    If Assigned(WICBitmap) then
      WICImage.Handle := WICBitmap;

    Bitmap.Assign(WICImage);
  finally
//    WICImage.Free;
  end;
end;

Harry Stahl 26. Feb 2015 22:34

AW: nach StretchBlt schwarzer Hintergrund
 
Stimmt, das geht auch mit der Windows Imaging Component (WIC), die Transparenz bleibt da erhalten.

Kleiner Wermutstropfen ist dabei, dass WIC unter Windows erst ab Vista standardmäßig im System dabei ist. Für XP muss der Anwender Deines Programms das auf dem System evtl. nachinstallieren (allerdings ab Servicepack xp3 ist es wohl schon dabei).

Aber allmählich ist die Unterstützung für XP vielleicht sowieso nicht mehr so wichtig...


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:41 Uhr.
Seite 4 von 4   « Erste     234   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz