如果 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;
}

关于c++ - 如果 CImage::Load 方法失​​败会发生什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33316970/

10-09 13:17