您的位置:首页 > 其它

关于StretchDIBits 可能返回失败的原因!

2015-07-17 15:02 190 查看
如果自己在加载图片是返回值为0,但是自己又找不出来错误,你就得注意StrechDIBits函数本身的限制问题了。它仅可以192k byte的内存空间,如果你的图像大小大于这个值,你可以将图像缩小,测试一下。如果是这种情况,(*^__^*) 嘻嘻.....

参考:

StretchBlt()/StretchDIBits() 失败时大大不同位图大小


电子邮件

打印

注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。

269585

本文已归档。它按“原样”提供,并且不再更新。

症状

StretchBlt() 和 StretchDIBits() 可能会返回 FALSE (0,一个指示失败的布尔值),即使系统内存低、 这两个设备上下文是兼容,并不是正确的边界内的两个矩形,这就可能会发生。如果源位图是比目标位图的要小得多,可能会发生此问题。

已知此问题会影响作为桌面墙纸的某些位图的显示,启用活动桌面 Web 内容。

原因

出现此问题的原因是图形设备接口 (GDI) 分配的内部缓冲区的位图缩放操作。从源位图的一个扫描行 (或带) 是拉伸 (或缩放) 到此的缓冲区,然后将其复制到目标位图。缓冲区的大小由以下初始条件确定:

目标位图 PELS 一个源中的宽度扫描行。
垂直缩放因子 (目标高度 / 源高度)。
每 PEL (颜色深度) 的字节数。

此缓冲区的最大大小被约束为 64 kb (对于 StretchBlt()) 和 192 千字节为单位 (对于 StretchDIBits())。如果缩放因素或乘数大,它不能为 StretchBlt() 分配既小于 64 千字节 (K) 的缓冲区和大得足以处理单个带区。同样,StretchDIBits() 可能不能分配的缓冲区可以容纳一个带区 192 K 比小的。

将给定 1024 x 768 x 256 色的显示指标和 16 x 16 源位图,StretchBlt() 无法由于用来查找该最佳的缓冲区的大小,但会成功,如果源位图 18 x 18 或更大的查寻方法中的边界条件。


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: