第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么我從 Clipboard 類中得到 OutOfMemoryException?

為什么我從 Clipboard 類中得到 OutOfMemoryException?

C#
眼眸繁星 2022-06-19 16:36:06
我正在嘗試使用System.Windows.Clipboard該類從剪貼板獲取圖像:var bitmapSource = System.Windows.Clipboard.GetImage();當通過 PrintScreen 鍵復制圖像時,它可以正常工作。但是,當從醫(yī)療應用程序復制圖像時,出現(xiàn)以下異常:System.OutOfMemoryException: Insufficient memory to continue the execution of the program.   at System.Runtime.InteropServices.ComTypes.IDataObject.GetData(FORMATETC& format, STGMEDIUM& medium)   at System.Windows.DataObject.OleConverter.GetDataInner(FORMATETC& formatetc, STGMEDIUM& medium)   at System.Windows.DataObject.OleConverter.GetDataFromOleOther(String format, DVASPECT aspect, Int32 index)   at System.Windows.DataObject.OleConverter.GetData(String format, Boolean autoConvert, DVASPECT aspect, Int32 index)   at System.Windows.DataObject.OleConverter.GetData(String format, Boolean autoConvert)圖像在 Paint 和 Word 上粘貼良好,因此圖像被正確復制到剪貼板。這不是一個巨大的圖像,所以我絕對沒有內(nèi)存不足。有任何想法嗎?調(diào)用Clipboard.GetDataObject().GetFormats()返回以下內(nèi)容:{string[11]}    [0]: "Rich Text Format"    [1]: "MetaFilePict"    [2]: "PNG+Office Art"    [3]: "Office Drawing Shape Format"    [4]: "DeviceIndependentBitmap"    [5]: "Bitmap"    [6]: "System.Drawing.Bitmap"    [7]: "System.Windows.Media.Imaging.BitmapSource"    [8]: "Format17"    [9]: "EnhancedMetafile"    [10]: "System.Drawing.Imaging.Metafile"我嘗試Clipboard.GetData(format)了上述每種格式,唯一返回非空對象的格式是“PNG+Office Art”、“Office Drawing Shape Format”、“Format17”和“EnhancedMetafile”。
查看完整描述

1 回答

?
HUX布斯

TA貢獻1876條經(jīng)驗 獲得超6個贊

我相信你的答案就在這里。簡而言之:


結(jié)論是,如果您在 WPF 中使用剪貼板,并且您得到的 System.OutOfMemoryExceptions 似乎沒有任何意義,那么您可能忘記將 SerializableAttribute 添加到您放置在剪貼板上的任何類中。


那么這個醫(yī)療應用程序是您的應用程序嗎?因為看起來問題在于如何將圖像放入剪貼板,而不是如何檢索圖像。


更新:由于這不是您的應用程序,那么您可能不得不忍受他們的錯誤(或 中的錯誤Clipboard.GetData())。的源代碼Clipboard.GetImage()是這樣的:


public static Image GetImage() {

    var dataObject = Clipboard.GetDataObject();

    if (dataObject != null) {

        return dataObject.GetData(DataFormats.Bitmap, true) as Image;

    }


    return null;

}

請注意,您的堆棧跟蹤表明異常發(fā)生在GetData(). 查看源代碼,這意味著調(diào)用GetDataObject()有效,這意味著您可以(理論上)使用GetDataObject()自己并將其轉(zhuǎn)換IDataObject為您可以使用的東西。


可能需要一些探索才能弄清楚發(fā)生了什么。您可能可以IDataObject.GetFormats()用來檢查它是什么,然后IDataObject.GetData()用來獲取該格式的數(shù)據(jù)。


更新 2:此處的解決方案為我們指明了正確的方向,但需要進行一些修改:


var data = Clipboard.GetDataObject();

var ms = (MemoryStream) data.GetData("PNG+Office Art");


var image = Image.FromStream(ms)


查看完整回答
反對 回復 2022-06-19
  • 1 回答
  • 0 關注
  • 173 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號