SetDIBitsToDevice的问题

huangxiaofei 2006-07-16 07:36:24
在看<<Programming Windows 5th>>,里面提到当DIB图象在内存中按照从上到下的方式存储的时候,SetDIBitsToDevice(hdc,xDst,yDst,cxSrc,cySrc,xSrc,ySrc,yScan cyScan,pBits,pInfo,fClrUse)在被用于截取整个DIB图象的一部分到屏幕时,cyScan取的是DIB图象高度属性的绝对值(该高度属性在按照从上到下存储的时候为负数,从下到上存储时为正.),则该部分的图象才能被正确地显示,如果不取绝对值,则该部分图象无法显示.而如果用SetDIBbitsToDevice将整个DIB图象复制到屏幕,无论DIB图象在内存中使用从上到下顺序存放还是从下到上,cyScan的值为正还是为负都无所谓,都能正确显示.这是为什么?
我不明白CHARLSE PETZOLD讨论这个话题是为了什么,反正理解起来很困难,不知道他究竟想说明什么问题.哪位高手给我说明一下?
...全文
656 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dong 2006-07-16
  • 打赏
  • 举报
回复
我帮你找到了一篇理论和实践的网页
http://www.sdlgame.com/reference/Programming%20Windows/15.htm
Dong 2006-07-16
  • 打赏
  • 举报
回复
DIB图象在内存中使用从上到下顺序存放还是从下到上,cyScan的值为正还是为负都无所谓,都能正确显示.这是为什么?
----------------------------------------------
图象在内存的表示:(我记得)从下到上,从左到右!
cyScan设定为DIB的高度
jixingzhong 2006-07-16
  • 打赏
  • 举报
回复
如果不看说明,
直接操作,
那么一般都是 cyScan取的是DIB图象高度属性,
而实际要求的是在 截取的时候需要的是这个属性的绝对值,
也就是该参数具有特殊的要求,所以这么解释了一下...

至于后面的,
由于截取的时候是获取的绝对值,
那么在复制(称之为 显示 更合适)的时候,
由于前面的 截取 时候获取的是 绝对值参数,
所以这里能够提供的也不能是 DIB图象高度属性本身,
而是它的绝对值 .....
如果是需要 DIB图象高度属性本身作为参数,
那么这个 显示 就没有办法实现了,
因为 DIB图象高度属性 参数没有获取 ....
jixingzhong 2006-07-16
  • 打赏
  • 举报
回复
没有用处么?

SetDIBitsToDevice : cyScan取的是DIB图象高度属性的绝对值
截取的时候,cyScan如果 取DIB图象高度属性本身,而不是绝对值,这样就会发生错误啊 ...
huangxiaofei 2006-07-16
  • 打赏
  • 举报
回复
谢谢指教!
Dong 2006-07-16
  • 打赏
  • 举报
回复
这个真的不明白了。

但屏幕的坐标是不是从做上角开始算起呢?是的话,cyCan的值就有可能是负的啊。
但复制一部分真的很难说!

你还是看看程序别的地方的问题吧,别钻牛叫尖了。google找找
huangxiaofei 2006-07-16
  • 打赏
  • 举报
回复
我不明白的是为什么SetDIBitsToDevice()在复制从上到下的DIB图的时候,如果是整个图象复制到屏幕,哪cyScan是可以为负数的,这时候加不加绝对值都能达到正确的结果,但是如果是复制从上到下DIB图的一部分的时候,缺必须要求cyScan为正.

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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