图像缩放问题, 高手请进

nerosoft 2005-07-13 02:06:31
在view中做 图像缩放, 但是用StretchBlt后resize窗口大小的时候会出现图像跳动现象, 结果发现是因为在窗口大小变化时, 重新计算可见区域图像的坐标时由浮点数取整导致了图像的跳动, 请教高手如何解决这样的问题??

急!!!
...全文
204 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
nlstone 2005-07-14
  • 打赏
  • 举报
回复
你说的跳动是指长宽比反生变化产生的抖动吗? 如果不是,则不是取整的问题.
如果是,你可以将原始坐标乘以一个系数再来除以缩放系数(改变映射模式中的一些参数扩大显示范围的值域即可)
goodboyws 2005-07-13
  • 打赏
  • 举报
回复
MoveWindow最后一个参数可以为FALSE,指定为不重画
nerosoft 2005-07-13
  • 打赏
  • 举报
回复
为什么缩放的时候要改变左上角的位置呢??如果不改就不跳了吧

=================================================================

不改也会又小的 跳动, 因为图像宽度和高度有可能在 窗口大小变化时在一个区间内不改变, 就会造成拉伸变形再还原的循环当中
goodboyws 2005-07-13
  • 打赏
  • 举报
回复
好像你的意思是,你缩放后调用MoveWindow,MoveWindow产生OnSize,OnSize里面又会缩放
可以在缩放操作中算出窗口大小后直接调用MoveWindow, 由MoveWindow产生的OnPaint去StretchBlt.
ChenJF206 2005-07-13
  • 打赏
  • 举报
回复
为什么缩放的时候要改变左上角的位置呢??如果不改就不跳了吧
nerosoft 2005-07-13
  • 打赏
  • 举报
回复
是这样的

当前可见区域(客户区+加上滚动条位置)为
20,20,100,100
如过缩放系数为10.0那么对应的图像范围应该是
2,2,10,10
StretchBlt(DestDC,20,20,100,100,hSrcDC,2,2,10,10,SRCCOPY);就没什么问题

如果缩放系数为3.3之类的那么就会出现如下问题
实际需要显示的图像范围为:
20/3.3,20/3.3,100/3.3,100/3.3 之后得出的
值就会随着窗口大小的变化不断的跳跃
我想知道如何能够避免此类情况的发生??

谢谢
goodboyws 2005-07-13
  • 打赏
  • 举报
回复
我知道我理解错了,但是还是没明白,重新计算可见区域图像的坐标是怎么做的,为什么要resize,你是指图像来回抖么,如果你在OnSize里做这类事情,好像没有必要Resize
nerosoft 2005-07-13
  • 打赏
  • 举报
回复
goodboyws(深夜不眠者),
是 图像的坐标由于浮点数取整导致的跳动现象,不是效果的问题
goodboyws 2005-07-13
  • 打赏
  • 举报
回复
SetStretchBltMode(hDC, HALFTONE);这个效果最好

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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