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

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何從Clipboard類獲取圖像格式?

如何從Clipboard類獲取圖像格式?

C#
眼眸繁星 2023-07-22 18:32:38
我正在用 C# 制作一個(gè)圖像查看器。該功能是使用 C# 上的 Clipboard 類進(jìn)行復(fù)制和粘貼功能。我成功獲取了BitmapSource的圖像。但它無法檢查圖像格式(jpeg、png、bmp)。這是 C# 支持的源 BitmapSource source = Clipboard.GetImage();這些是我想要使用的。 byte[] image = Clipboard.GetImage("image/png") byte[] image = Clipboard.GetImage("image/bmp")我會(huì)說,如何從 BitmapSource 或剪貼板檢查圖像格式?
查看完整描述

1 回答

?
料青山看我應(yīng)如是

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超8個(gè)贊

簡而言之,你不能。

圖像作為原始位圖保存在剪貼板上。有些應(yīng)用程序也將其以 png 格式顯示,但這并不是為了保留原始格式,而只是為了更好地支持 alpha-transparency。

但是,一般來說,剪貼板根本不包含該圖像的來源或最初的格式的任何指示。您還必須意識到剪貼板上的圖像可能根本就不是文件。這就像假設(shè)任何復(fù)制的文本都必須是一個(gè)帶有文件名的完整文本文件。該圖像可能是直接從某個(gè)編輯器復(fù)制的,甚至可能是直接的 [PrintScreen] 按鈕屏幕截圖。

然而...

注意到,當(dāng)我從 Chrome 復(fù)制圖像并將其粘貼到 Discord 中時(shí),Discord 會(huì)以某種方式知道它在 Chrome 中的文件名。這是因?yàn)槟梢酝瑫r(shí)將多種格式的數(shù)據(jù)放入剪貼板。

該系統(tǒng)通常旨在確保每個(gè)應(yīng)用程序都可以讀取最適合它的內(nèi)容。例如,對于從網(wǎng)頁復(fù)制的內(nèi)容,記事本將首選純文本版本,而 Microsoft Word 將采用 HTML(如果可用)。同樣,正如我所提到的,應(yīng)用程序通常以位圖和 png 格式復(fù)制圖像,以確保支持透明度的接收應(yīng)用程序可以采用支持透明度的 PNG 版本,而不了解使用 PNG 的新趨勢的應(yīng)用程序可以采用經(jīng)典位圖。

但許多應(yīng)用程序也使用它來將元數(shù)據(jù)添加到復(fù)制的內(nèi)容中。當(dāng)我在 Chrome 中復(fù)制您頭像的 32x32 縮略圖時(shí),剪貼板中的內(nèi)容之一是此文本片段標(biāo)識為HTML Format

Version:0.9

StartHTML:0000000105

EndHTML:0000000238

StartFragment:0000000141

EndFragment:0000000202

<html>

<body>

<!--StartFragment--><img src="https://i.stack.imgur.com/Eql2x.jpg?s=32&amp;g=1"/><!--EndFragment-->

</body>

</html>

(我相信指定 HTML 片段信息的標(biāo)頭可能是標(biāo)準(zhǔn)格式。但從未研究過這一點(diǎn)。)

如您所見,這包含文件名,并且您通常會(huì)獲得一個(gè)擴(kuò)展名,可用于確定文件的原始格式。

但該文件不再是那種格式。因?yàn)?,它只是剪貼板上的數(shù)據(jù),而不是實(shí)際的文件。復(fù)制圖像后 Chrome 剪貼板的完整轉(zhuǎn)儲(chǔ)包含以下格式:

  • System.Drawing.Bitmap(.Net Bitmap 對象。這可能在 WPF 上以不同的方式公開)

  • Bitmap(和System.Drawing.Bitmap我想的一樣)

  • HTML Format(上面顯示的片段)

  • DeviceIndependentBitmap(包含 DIB v1 圖像字節(jié)的字節(jié)流;在剪貼板上傳輸圖像的最常見方式;經(jīng)常被濫用為具有 alpha 功能,因?yàn)樗?32 位 RGB)

  • Format17(包含 DIB v5 圖像字節(jié)的字節(jié)流;比 v1 稍微高級,并且正式支持 alpha?!?7”指的是舊 Windows 版本中使用的舊數(shù)字剪貼板格式)

如您所見,其中沒有 jpeg 文件。因?yàn)楫?dāng)您處于剪貼板級別時(shí),永遠(yuǎn)不會(huì)假定保留原始文件格式。即使是能夠讀取并保留文件名的 Discord,也會(huì)將粘貼的文件另存為 png,并根據(jù)需要調(diào)整文件擴(kuò)展名。

在這種特定情況下,您當(dāng)然可以實(shí)際從該 url 下載圖像,而不是使用剪貼板版本。但從技術(shù)上講,這永遠(yuǎn)不能保證是相同的圖像。

請注意,Chrome 就是這樣做的。無法保證來自其他應(yīng)用程序甚至其他瀏覽器的剪貼板副本將發(fā)送元數(shù)據(jù),并且如果發(fā)送元數(shù)據(jù),則其格式是否略有可比。


我用來分析剪貼板數(shù)據(jù)的代碼:

(注意,這是 Windows 窗體代碼。我不知道它的 WPF 等效項(xiàng))

DataObject retrievedData = (DataObject)Clipboard.GetDataObject();

if (retrievedData == null)

? ? return;

String[] formats = retrievedData.GetFormats();

foreach (String format in formats)

{

? ? Object contents = retrievedData.GetData(format);

? ? MemoryStream ms = contents as MemoryStream;

? ? Byte[] bContents = ms == null ? null : ms.ToArray();

? ? String sContents = contents as String;


? ? // Check if bContents and sContents are null here, and analyse their contents


? ? // ...

}


查看完整回答
反對 回復(fù) 2023-07-22
  • 1 回答
  • 0 關(guān)注
  • 240 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

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