From f13f107b26ee505a4caa3d424f1d094580f904e1 Mon Sep 17 00:00:00 2001 From: Vitaliy Orazov Date: Thu, 28 Sep 2023 22:51:35 +0300 Subject: [PATCH 1/2] fix Format.Dib converting in windows --- ShareClipbrd/Clipboard.Core/ClipboardData.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ShareClipbrd/Clipboard.Core/ClipboardData.cs b/ShareClipbrd/Clipboard.Core/ClipboardData.cs index 114cf04..55dd31c 100644 --- a/ShareClipbrd/Clipboard.Core/ClipboardData.cs +++ b/ShareClipbrd/Clipboard.Core/ClipboardData.cs @@ -418,7 +418,7 @@ public static class Format { (stream) => { if(OperatingSystem.IsWindows()) { return stream switch { - MemoryStream memoryStream => memoryStream.ToArray(), + MemoryStream memoryStream => memoryStream, _ => throw new ArgumentException(nameof(stream)) }; } From d08971b57199916598acc846790133c40ee3fe50 Mon Sep 17 00:00:00 2001 From: Vitaliy Orazov Date: Fri, 29 Sep 2023 23:12:56 +0300 Subject: [PATCH 2/2] support PNG clipboard (retrieving as Device Independent Bitmap) --- ShareClipbrd/Clipboard.Core/ClipboardData.cs | 36 ++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/ShareClipbrd/Clipboard.Core/ClipboardData.cs b/ShareClipbrd/Clipboard.Core/ClipboardData.cs index 55dd31c..adc0b3d 100644 --- a/ShareClipbrd/Clipboard.Core/ClipboardData.cs +++ b/ShareClipbrd/Clipboard.Core/ClipboardData.cs @@ -42,6 +42,7 @@ public static class Format { public const string WaveAudio = "WaveAudio"; + public const string PNG = "PNG"; public const string Dib = "DeviceIndependentBitmap"; public const string ImageBmp = "image/bmp"; @@ -443,6 +444,41 @@ public static class Format { } )}, + { Format.PNG, new Convert( + async (c, getDataFunc) => { + var data = await getDataFunc(Format.Dib); + if (data is MemoryStream castedValue) {c.Add(Format.Dib, castedValue); return true; } + if (data is byte[] bytes) {c.Add(Format.Dib, new MemoryStream(bytes)); return true; } + return false; + }, + (stream) => { + if(OperatingSystem.IsWindows()) { + return stream switch { + MemoryStream memoryStream => memoryStream, + _ => throw new ArgumentException(nameof(stream)) + }; + } + + if(OperatingSystem.IsLinux()) { + return stream switch { + MemoryStream memoryStream => ImageConverter.FromDibToBmpFileData(memoryStream), + _ => throw new ArgumentException(nameof(stream)) + }; + } + + throw new NotSupportedException($"OS: {Environment.OSVersion}"); + }, + () => { + if(OperatingSystem.IsWindows()) { + return Format.Dib; + } + if(OperatingSystem.IsLinux()) { + return Format.ImageBmp; + } + throw new NotSupportedException($"OS: {Environment.OSVersion}"); + } + )}, + { Format.ImageBmp, new Convert( async (c, getDataFunc) => { var data = await getDataFunc(Format.ImageBmp);