6

256x256ビットマップのTImageでStretched=Trueを使用しています。これは、1、2、4、または8だけ縮小されます。予想どおり、「1」から離れるほど、ビットマップ上のテキストはひどくなります。ただし、Windows 7エクスプローラーは、縮小されたバージョンのビットマップを「よりソフト」でより快適にレンダリングすることに気付きました。この方法でTBitmapを「ぼかす」ことは可能ですか?

4

2 に答える 2

9

TBitmapではなく、TImageでStretched=Trueを意味していると思います。

残念ながら、TImageには、画像のサイズ変更に関して、リサンプラーが組み込まれていません。さまざまなリサンプラーをサポートしているため、 Graphics32を使用することをお勧めします(サイズを大きくするのに適しているものもあれば、サイズを小さくするのに適しているものもあります)

于 2010-05-07T12:20:28.243 に答える
9

HALFTONE StretchBltModeを使用すると、通常のストレッチドローよりもスムーズな結果が得られます。これは、Windows2000以降でのみ機能します

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;
于 2010-05-08T08:57:37.383 に答える