在C#中操作剪貼板複製圖片時,如果是普通圖片,可直接將其複製爲Bitmap,這樣到QQ、微信中粘貼的時候就會直接顯示
但是,如果是GIF圖片,則粘貼後會發現其無法動,因爲將其作爲Bitmap複製時,只複製了首幀過去,自然動不了
從網上查找解決辦法,因爲我是準備在UWP中實現這個,所以一直以UWP爲關鍵字搜索,沒有找到任何結果,後來以“C# 複製GIF到QQ”爲關鍵字來搜索,總算搜到了有用的內容
大致的解決辦法就是,因爲剪貼板本身不支持複製GIF圖片,所以要將圖片轉成html的形式去複製,但是其中有一些參數是需要注意的,StartHTML、EndHTML、StartFragment、EndFragment
下面封裝了一個方法,可以將本地的gif複製,在QQ、微信中可直接粘貼
public static string HtmlFormatConstruct(string gifPath)
{
string html = "";
{
var htmlPath = Path.GetTempFileName();
string version = "Version:0.9" + Environment.NewLine;
string startHtml = "StartHTML:";
string endHtml = "EndHTML:";
string startFragment = "StartFragment:";
string endFragment = "EndFragment:";
string sourceUrl = "SourceURL:file:///" + htmlPath + Environment.NewLine;
string htmlContentStart = "<html><body>" + Environment.NewLine;
string fragmentContent = "<!--StartFragment-->" + "<img src=\"file:///" + gifPath + "\" />" +
"<!--EndFragment-->";
string htmlContentEnd = "</body></html>";
startHtml += (version.Length
+ startHtml.Length + 8 + Environment.NewLine.Length
+ endHtml.Length + 8 + Environment.NewLine.Length
+ startFragment.Length + 8 + Environment.NewLine.Length
+ endFragment.Length + 8 + Environment.NewLine.Length
+ sourceUrl.Length).ToString().PadLeft(8, '0') + Environment.NewLine;
endHtml += (version.Length
+ startHtml.Length
+ endHtml.Length + 8 + Environment.NewLine.Length
+ startFragment.Length + 8 + Environment.NewLine.Length
+ endFragment.Length + 8 + Environment.NewLine.Length
+ sourceUrl.Length
+ htmlContentStart.Length
+ fragmentContent.Length
+ htmlContentEnd.Length).ToString().PadLeft(8, '0') + Environment.NewLine;
startFragment += (version.Length
+ startHtml.Length
+ endHtml.Length
+ startFragment.Length + 8 + Environment.NewLine.Length
+ endFragment.Length + 8 + Environment.NewLine.Length
+ sourceUrl.Length
+ htmlContentStart.Length).ToString().PadLeft(8, '0') + Environment.NewLine;
endFragment += (version.Length
+ startHtml.Length
+ endHtml.Length
+ startFragment.Length
+ endFragment.Length + 8 + Environment.NewLine.Length
+ sourceUrl.Length
+ htmlContentStart.Length
+ fragmentContent.Length).ToString().PadLeft(8, '0') + Environment.NewLine;
html = version + startHtml + endHtml + startFragment + endFragment + htmlContentStart +
fragmentContent + htmlContentEnd;
}
return html;
}
將返回值以Html的模式設置到剪貼板即可,按我的理解,QQ和微信會去解析<!--StartFragment-->和<!--EndFragment-->之間的內容並粘貼,如果想要加些水印、尾巴什麼的,也可加在這之間