Ich verwende Stretched = True auf einem TImage mit einer 256x256 Bitmap. Dies wird um 1,2,4 oder 8 herunterskaliert. Wie erwartet, wird Text auf der Bitmap umso schrecklicher, je mehr ich von "1" abweicht. Ich merke jedoch, dass Windows 7 Explorer eine verkleinerte Version der Bitmap "weicher" und gefälliger rendert. Ist es möglich, eine TBitmap auf diese Weise zu "verwischen"?Ist es möglich, eine skalierte TBitmap in Delphi zu glätten?
Antwort
Ich nehme an, Sie meinen Stretched = True auf einem TImage, nicht auf einem TBitmap.
Leider hat TImage keine Resampler eingebaut, wenn es um die Größenänderung von Bildern geht. Meine Empfehlung wäre Graphics32 zu verwenden, da es eine Vielzahl von Resampler unterstützt (einige sind besser für zur Verringerung der Größe Größe andere steigend)
Durch die HALFTONE StretchBltMode verwendet, werden Sie glattere Ergebnisse als die normalen StretchDraw zu bekommen. Dies funktioniert nur in Windows 2000 und später
procedure SmoothResize();
var pt:TPoint;
h: HDC;
begin
h := imgMainPicture.Canvas.Handle;
// Previous call to StretchDraw
// imgMainPicture.Canvas.StretchDraw(Rect(0, 0, imgMainPicture.Width - 1,
// imgMainPicture.Height - 1), curPicture.AnnotatedBitmap);
// Normal StretchDraw uses STRETCH_DELETESCANS as StretchBltMode , HALFTONE should give better results
GetBrushOrgEx(h, pt);
SetStretchBltMode(h, HALFTONE);
SetBrushOrgEx(h, pt.x, pt.y, @pt);
StretchBlt(h, 0, 0, imgMainPicture.Width - 1,
imgMainPicture.Height - 1, curPicture.AnnotatedBitmap.Canvas.Handle,
0, 0, curPicture.Width,curPicture.Height,SRCCOPY);
end;
Toller Vorschlag, danke. –
@BrianFrost HALFTONE oder STRETCH_HALTONE ist Ihre beste Wette IMHO, hier ist ein Code http://code.google.com/p/delpheigeist-delphi-stuff/source/browse/trunk/SynMiniMap/src/SynMiniMap.pas – ComputerSaysNo
Danke, korrigiert den Text. Guter Vorschlag zu Graphics32. –