如果CImage的像素嘗試加載其他圖像並且加載方法失敗,那麼它的像素是否會被更改?如果CImage :: Load方法失敗會發生什麼情況?
4
A
回答
4
異常保證沒有記錄,所以你不能假設任何東西。
查看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;
}
+0
謝謝,這正是我需要的。 – iouvxz
+0
此外,您可以使用'CImage :: IsNull()'來檢查代碼中的加載是否成功。 –
相關問題
- 1. 如果打開失敗會發生什麼情況?
- 2. 如果寫入文件失敗,會發生什麼情況?
- 3. 如果php.ini丟失,會發生什麼情況?
- 4. 如果解析雲數據服務失敗,會發生什麼情況?
- 5. 如果部分Kudu部署到Azure失敗,會發生什麼情況?
- 6. 如果失敗的進程在欺詐算法發生選舉後醒來,會發生什麼情況
- 7. ConcurrentBag.TryTake()在什麼情況下會失敗?
- 8. 在什麼情況下AppDomain.DoCallback()會失敗?
- 9. 如果finally塊引發異常,會發生什麼情況?
- 10. 如果CFile :: Write引發異常會發生什麼情況?
- 11. 如果iOS分發證書過期會發生什麼情況?
- 12. 如果我的IExceptionPublisher引發異常,會發生什麼情況?
- 13. 當觸發的webhook調用失敗時,領導會發生什麼情況?
- 14. 非虛方法解析 - 爲什麼會發生這種情況
- 15. 在什麼情況/情況下,dynamic_cast <>可能會失敗?
- 16. 爲什麼會發生這種情況?
- 17. 如果未處理事件會發生什麼情況?
- 18. 如果有人拿到我的appsecret,會發生什麼情況?
- 19. minimax:如果min不起作用會發生什麼情況
- 20. 如果您打破Lock()語句,會發生什麼情況?
- 21. 如果NSURLCache已滿,會發生什麼情況?
- 22. 如果委託不存在,會發生什麼情況?
- 23. 如果未捕獲到異常,會發生什麼情況?
- 24. 如果我不調用transaction.close或transaction.rollback,會發生什麼情況?
- 25. 如果Web服務更改參數會發生什麼情況?
- 26. 如果ExecutorService的隊列已滿,會發生什麼情況
- 27. 如果MySQL數據庫未關閉,會發生什麼情況?
- 28. 如果minSdkVersion低於targetSdkVersion,會發生什麼情況?
- 29. 如果超時,會發生什麼情況?
- 30. 如果SetConsoleMode()不支持ENABLE_VIRTUAL_TERMINAL_PROCESSING,會發生什麼情況?
你嘗試一下了嗎? –
@πάνταῥεῖ:測試失敗並不像聽起來那麼簡單。加載可能會失敗,原因很多:圖像文件可能不存在,文件可能無法從當前用戶訪問,圖像文件可能具有不受支持或無效的文件格式,應用程序內存不足等等。其中一些錯誤條件不會破壞先前加載的圖像,而其他錯誤條件將會破壞。 – IInspectable
@πάνταῥεῖ我試過了,失敗了,像素保持不變。 – iouvxz