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! <<