mirror of
https://github.com/QL-Win/QuickLook.git
synced 2025-09-12 18:39:45 +00:00
Fix copying compatibility of BitmapFrame
This commit is contained in:
@@ -1,4 +1,6 @@
|
|||||||
using System.Drawing;
|
using System;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Drawing;
|
||||||
using System.Drawing.Imaging;
|
using System.Drawing.Imaging;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
@@ -14,9 +16,7 @@ internal static class ClipboardEx
|
|||||||
public static void SetClipboardImage(this BitmapSource img)
|
public static void SetClipboardImage(this BitmapSource img)
|
||||||
{
|
{
|
||||||
if (img == null)
|
if (img == null)
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
var thread = new Thread((img) =>
|
var thread = new Thread((img) =>
|
||||||
{
|
{
|
||||||
@@ -33,18 +33,33 @@ internal static class ClipboardEx
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
// BitmapFrameDecode or BitmapFrame may need to be converted to
|
||||||
|
// a standard format of BitmapSource to ensure compatibility
|
||||||
|
// and only the frozen image is supported
|
||||||
|
if (image is BitmapFrame && image.IsFrozen)
|
||||||
|
{
|
||||||
|
image = new WriteableBitmap(image);
|
||||||
|
}
|
||||||
|
|
||||||
using var pngMemStream = new MemoryStream();
|
using var pngMemStream = new MemoryStream();
|
||||||
using var bitmpa = image.Dispatcher?.Invoke(() => image.ToBitmap()) ?? image.ToBitmap();
|
using var bitmap = image.Dispatcher?.Invoke(() => image.ToBitmap()) ?? image.ToBitmap();
|
||||||
var data = new DataObject();
|
var data = new DataObject();
|
||||||
|
|
||||||
bitmpa.Save(pngMemStream, ImageFormat.Png);
|
bitmap.Save(pngMemStream, ImageFormat.Png);
|
||||||
data.SetData("PNG", pngMemStream, false);
|
data.SetData("PNG", pngMemStream, false);
|
||||||
|
|
||||||
Clipboard.SetDataObject(data, true);
|
Clipboard.SetDataObject(data, true);
|
||||||
}
|
}
|
||||||
catch { } // Clipboard competition leading to failure is common
|
catch (Exception e)
|
||||||
// There is currently no UI notification of success or failure
|
{
|
||||||
});
|
// Clipboard competition leading to failure is common
|
||||||
|
// There is currently no UI notification of success or failure
|
||||||
|
Debug.WriteLine(e);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
{
|
||||||
|
Name = nameof(ClipboardEx),
|
||||||
|
};
|
||||||
thread.SetApartmentState(ApartmentState.STA);
|
thread.SetApartmentState(ApartmentState.STA);
|
||||||
thread.Start(img);
|
thread.Start(img);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user