BitBlt仅在特定条件下复制部分数据
BitBlt copies only part of data in certain conditions
这是一个奇怪的问题,我已经阅读了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,则none源区域被复制
好吧,我确信整个区域都生成了——当我使用这个代码时:
bBltOk = ::BitBlt(_hdcDest, 0, 0, rcScreen.Widht(), rcScreen.Height(),
_hdcSource, 0, 0,SRCCOPY);
然后我看到整个区域生成
有人知道为什么我在这么简单的功能上会遇到这样的问题吗?
问题已解决,但仍存在一些错误。问题是源位图(或hdc,无法访问某些内部)没有配置为保存所有所需的数据(大小太小)。
错误的是,我能够复制整个区域并获得有效的数据,但当试图只复制某些部分(即使是已经在整个区域中的部分)时,我得到了空数据。
相关文章:
- 使用 pybind11 调用 Python 函数时避免复制输入数据
- 不可复制类数据成员的统一初始化导致gcc错误
- 使用SSE内部函数复制少量数据时出现问题
- "std::unordered_map",无需复制关键数据
- boost::asio 以async_read复制输入数据
- 在结构之间复制字符数据
- QT:如何使用QT复制大数据
- 是否应该在复制构造函数或赋值运算符中复制静态数据成员
- 我可以通过向量附加特征矩阵而不复制任何数据
- 从外部 VM 复制特定数据的最佳方法是什么?
- C++ 阻止复制成员数据
- 使用 CUDA 将大数据复制到 GPU 和从 GPU 复制大数据
- 我可以使用STD ::复制将数据的位模式从整数向量复制到一系列未签名的字符
- gcc 的 std::bind 在源中的哪个位置将参数复制到数据结构中?
- BitBlt仅在特定条件下复制部分数据
- C++在 ActiveDirectory 和 Sqlite3 之间复制文本数据时出现问题
- 添加到矢量而不复制结构数据
- 在c++中复制类似数据结构的任何基于模板的通用方法
- 在C++中复制跨步数据
- Libjpeg:复制整个数据