Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.323 Beiträge
Delphi XE2 Professional
|
AW: nach StretchBlt schwarzer Hintergrund
25. Feb 2015, 18:07
Es gibt doch auch seit ein paar Delphi Versionen (Edit: Seit Delphi2010) ein Direct2D-Canvas was schon direkt mitgeliefert wird. Ist auch nicht schwerer als GDI+ (vllt sogar leichter) und DirectX wird wahrscheinlich so schnell nicht abgeschafft werden
Ich hab mit Direct2DCanvas jetzt mal was gebastelt:
Delphi-Quellcode:
procedure Scale_Bitmap(var Bitmap: TBitmap; DestWidth, DestHeight: Integer);
var
faktor : Real;
Width_Bitmap: Integer;
D2DCanvas : TDirect2DCanvas;
Temp_Bitmap : TBitmap;
Rect : TRect;
begin
If Bitmap.Empty then
exit;
Temp_Bitmap := TBitmap.Create;
Width_Bitmap := Bitmap.Width div 1; //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;
Rect.Left := 0;
Rect.Top := 0;
Rect.Width := round(Bitmap.Width * faktor);
Rect.Height := round(Bitmap.Height * faktor);
Temp_Bitmap.Width := Rect.Width;
Temp_Bitmap.Height := Rect.Height;
D2DCanvas := TDirect2DCanvas.Create(Temp_Bitmap.Canvas, Rect);
D2DCanvas.BeginDraw;
try
D2DCanvas.StretchDraw(Rect, Bitmap);
Bitmap.Assign(Temp_Bitmap);
finally
D2DCanvas.EndDraw;
FreeAndNil(D2DCanvas);
FreeAndNil(Temp_Bitmap);
end;
end;
[edit]
Mist - jetzt hab ich anstatt eines schwarzen Hintergrundes einen weissen Hintergrund
mfg
Helmi
>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
Geändert von Helmi (25. Feb 2015 um 18:21 Uhr)
|