关于图形缩放效果

QZDMMX2 2008-10-24 07:18:56
有个程序,需要把彩色灰度图片SBMP的某个区域(比如RECTA)剪切下来,缩放到
另个DBMP(大小为RECTB),一般用COPYRECT:
DBMP.CANVAS.COPYRECT(RECTB,SBMP.CANVAS,REACTA);
发现画面放大还好,但垂直方向如果有缩小则出现黑纹,不知道怎么回事.
但发现如果先把SBMP的RECTA区域拷到一个中间的CBMP(大小同RECTA一样),再用
DBMP.CANVAS.StretchDraw(RECTB,CBMP);
则无论放大还是缩小都没有问题,但是觉得每次通过一个CBMP总是不太好,因为我每秒
要进行20次以上的操作,而且每次RECTA可能会不同,所以CBMP要不停动态生成和释放,怕
对系统稳定性造成不良影响,而且降低了速度,请大虾们看看这两种做法有什么不同,怎样
能一次完成操作呢.
另外直接用StretchBlt效果也跟COPYRECT一样不好,是不是StretchDraw使用的
StretchBltMode有所不同,用SetStretchBltMode换了几个好象都不行.
...全文
77 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
mdejtod 2008-10-24
  • 打赏
  • 举报
回复
试试用GDI+

var FGraphics : TGpGraphics;
FImage : TGPImage;
Rect : TGpRect;
begin
try
FGraphics := TGpGraphics.Create(Form1.Canvas.Handle);
Rect := GpRect(650,140,100,100); //X,Y 坐标,需要绘制的长度和宽度
FImage := TGPImage.Create('4.gif');
FGraphics.DrawImage(FImage,Rect,0,0,100,100,utPixel); // 0,0,320,240Rect 范围内的起始坐标和原图像大小
Finally
FGraphics.Free;
FImage.Free;
end;
end;

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧