如果CImage尝试加载另一个图像,并且加载方法失败,是否会更改其像素?
没有记录例外保证,因此您无法承担任何责任。
查看CImage::Load
(atlimage.h)的源代码可以发现,无法加载图像可能会破坏先前存储的图像。这两个Load
重载最终都调用CImage::CreateFromGdiplusBitmap
。该类成员执行两个操作:1.)调用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;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句