我在具有 256x256 位图的 TImage 上使用 Stretched=True。这将按比例缩小 1、2、4 或 8。正如预期的那样,位图上的文本越远离“1”,就越可怕。我注意到,尽管 Windows 7 资源管理器将位图的缩小版本呈现“更柔和”且更令人愉悦。是否可以以这种方式“模糊”TBitmap?
问问题
6062 次
2 回答
9
我想您的意思是 TImage 上的 Stretched = True,而不是 A TBitmap。
不幸的是,在调整图像大小时,TImage 没有内置重采样器。我的建议是使用Graphics32,因为它支持各种重采样器(一些更适合增加尺寸,另一些更适合减小尺寸)
于 2010-05-07T12:20:28.243 回答
9
通过使用 HALFTONE StretchBltMode,您将获得比普通拉伸绘制更平滑的结果。这仅适用于 Windows 2000 及更高版本
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 回答