Einzelnen Beitrag anzeigen

Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#1

nach StretchBlt schwarzer Hintergrund

  Alt 21. Feb 2015, 21:38
Hallo,

ich nutze zum skalieren von Bitmaps diese Function:

Delphi-Quellcode:
procedure Scale_Bitmap(var Bitmap: TBitmap; DestWidth, DestHeight: Integer;
  Smooth: Boolean = false);
var
  faktor : Real;
  Width_Bitmap: Integer;
  Temp_Bitmap : TBitmap;
  Copy_Bitmap : TBitmap;

begin
  If Bitmap.Empty then
    exit;

  Temp_Bitmap := TBitmap.Create;
  Copy_Bitmap := TBitmap.Create;

  Width_Bitmap := Bitmap.Width div Count_Glyphs(Bitmap);

  If Width_Bitmap > DestWidth then
    begin
      faktor := DestWidth / Width_Bitmap;
      If (Bitmap.Height * faktor) > DestHeight then
        faktor := DestHeight / Bitmap.Height;
    end
  else
    begin
      faktor := DestHeight / Bitmap.Height;
      If (Width_Bitmap * faktor) > DestWidth then
        faktor := DestWidth / Width_Bitmap;
    end;

  try
    Copy_Bitmap.PixelFormat := pf24Bit;
    Copy_Bitmap.Assign(Bitmap);

    Temp_Bitmap.Width := round(Bitmap.Width * faktor);
    Temp_Bitmap.Height := round(Bitmap.Height * faktor);

    If Smooth then
      SetStretchBltMode(Temp_Bitmap.Canvas.Handle, HALFTONE);

    StretchBlt(Temp_Bitmap.Canvas.Handle, 0, 0, Temp_Bitmap.Width, Temp_Bitmap.Height,
               Copy_Bitmap.Canvas.Handle, 0, 0, Copy_Bitmap.Width, Copy_Bitmap.Height,
               SRCCOPY);

    Bitmap.Assign(Temp_Bitmap);
  finally
    FreeAndNil(Temp_Bitmap);
    FreeAndNil(Copy_Bitmap);
  end;
end;
Das Vergrößern/Verkleinern funktioniert wunderbar - nur habe ich immer nach StretchBlt einen scharzen Hintergrund.
Das Original-Bitmap hat einen transparenten Hintergrund.

Ich habe schon versucht, die Transparenz-Properties von Bitmap auf Temp_Bitmap zu übertragen - aber geholfen hat es nichts.

Wie bekomm ich nach StrechBlt auch eine Transparenz?

Ich habe diesen Thread gefunden - aber leider hat er mir auch nicht geholfen
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat