Ich verwende Stretched=True für ein TImage mit einer 256x256 Bitmap. Diese wird um 1,2,4 oder 8 verkleinert. Wie zu erwarten, wird der Text auf der Bitmap umso grausamer, je weiter ich von 1 abweiche. Ich stelle jedoch fest, dass der Windows 7-Explorer eine verkleinerte Version des Bitmaps "weicher" und ansprechender wiedergibt. Ist es möglich, eine TBitmap auf diese Weise 'unscharf' zu machen?
Antworten
Zu viele Anzeigen?
Jan Oosting
Punkte
467
Wenn Sie den HALFTONE StretchBltMode verwenden, erhalten Sie glattere Ergebnisse als mit dem normalen Stretchdraw. Dies funktioniert nur unter Windows 2000 und höher
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;
Ich nehme an, Sie meinen Stretched = True bei einem TImage, nicht bei einer TBitmap.
Leider hat TImage keinen eingebauten Resampler, wenn es darum geht, die Größe von Bildern in TImage zu ändern. Meine Empfehlung wäre die Verwendung von Grafiken32 da es eine Vielzahl von Resamplern unterstützt (einige sind besser zum Vergrößern, andere zum Verkleinern geeignet)