如果CImage::Load方法失败会发生什么?
What happens if CImage::Load method fails?
如果CImage试图加载另一个图像,并且加载方法失败,CImage的像素会被改变吗?
异常保证没有文档记录,因此您不能假设任何事情。
查看CImage::Load
(atlimage.h)的源代码可以发现,加载图像失败会破坏先前存储的图像。两个Load
过载最终调用到CImage::CreateFromGdiplusBitmap
。这个类成员执行两个操作:它调用Create
为映像创建新的存储。这种操作是破坏性的。2.) 它将源图像数据复制到目标。此操作可能失败。
因为你有一个操作可能会在破坏之前的任何数据之后失败,所以你不能认为加载图像失败会保留之前的图像数据。
下面的代码实现了非破坏性的图像加载,首先将图像加载到临时文件中,并在成功时将其分配给目标文件:
HRESULT NonDestructiveLoad( CImage& img, const CString& fileName ) {
CImage tempImage;
HRESULT hr = tempImage.Load( fileName );
if ( SUCCEEDED( hr ) ) {
// The following operations cannot fail
img.Destroy();
img.Attach( tempImage.Detach() );
}
return hr;
}
相关文章:
- 这个失败的测试是将零添加到空指针未定义的行为、编译器错误还是其他什么?
- 访问提升:shared_ptr 主范围外崩溃,断言失败:px != 0.指针的正确用法是什么?
- 指示 Qi 变换属性失败的适当方法是什么?
- dynamic_cast什么时候会因为隐藏符号而失败?
- 什么时候标准::线程::连接会因no_such_process而失败
- 替代有什么用,不是失败
- 显式实例化失败的原因是什么
- QtDCM 编译失败的可能原因是什么?
- 错误 opencv 错误断言失败 (p [-1] <= 2) 是什么意思以及如何处理它?
- 查找函数在失败结果中应该返回什么
- 什么可能导致应用程序在工作几个小时后锁定获取 SIGABRT 失败
- 什么错误的逻辑导致我的链表的这个 push_back(..) 函数失败?
- c++.系统调用move什么时候会失败
- dynamic_cast失败意味着什么
- C++ 运行失败:退出值 2 - 我的代码出了什么问题?
- 我的复制构造函数导致使用我的类的方法失败.有人能看一眼,告诉我我做错了什么吗
- 在这个失败的C++类实例化中,我忽略了什么明显的事情
- 什么会导致罕见的 lchown() 失败:不允许操作
- 什么会导致 D3D11CreateDevice() 失败并出现E_FAIL
- 当我尝试caputre〔this〕时,用于回调函数的lambda表达式失败,原因是什么