这是一个奇怪的问题,我已经阅读了BitBlt函数的文档,它在大多数情况下都没有任何问题,但是如果我尝试从中复制数据,则开始失败(只复制部分甚至没有复制)偏移量大于目标大小的源矩形...奇怪?这里有几个样本:
这是我使用的代码,结果取决于我传递的参数。
位图的宽度为m_iTileAreaWidth + 2 * m_iTileAreaMargin
,高度为m_iTileAreaHeight + 2 * m_iTileAreaMargin
BOOL bBltOk = ::BitBlt(_hdcDest, 0, 0, m_iTileAreaWidth, m_iTileAreaHeight,
hdcSource, m_iTileAreaMargin, m_iTileAreaMargin, SRCCOPY);
如果m_iTileAreaMargin
600 且m_iTileAreaWidth
且m_iTileAreaHeight
200 ,则 130px 源区域已复制
如果m_iTileAreaMargin
500 且m_iTileAreaWidth
且m_iTileAreaHeight
200 ,则完整来源被复制
如果m_iTileAreaMargin
800 且m_iTileAreaWidth
且m_iTileAreaHeight
200 ,则无来源区域被复制
嗯,我确定整个区域都已生成 - 当我使用此代码时:
bBltOk = ::BitBlt(_hdcDest, 0, 0, rcScreen.Widht(), rcScreen.Height(),
_hdcSource, 0, 0,SRCCOPY);
然后我看到整个区域生成了
有没有人知道为什么我这么简单的功能会出现这样的问题?
答案 0 :(得分:0)
问题解决了 - 但仍有一些谜团。问题是源位图(或hdc,无法访问某些内部)未配置为保存所有必需的数据(大小太小)。
谜是我能够复制整个区域并获得有效数据,但是当试图仅复制某些部分(甚至已经在整个区域中的部分)时,我得到了空数据。