7 Stimmen

Ist es möglich, eine skalierte TBitmap in Delphi zu glätten?

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?

10voto

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;

9voto

iamjoosy Punkte 3259

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)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X