我需要解析Clipboard.GetImage()
的内容(一个BitmapSource
),转换为BitmapImage
。 有人知道如何做吗?
我需要解析Clipboard.GetImage()
的内容(一个BitmapSource
),转换为BitmapImage
。 有人知道如何做吗?
我找到了一个简洁的解决方案,它有效:
BitmapSource bitmapSource = Clipboard.GetImage();
JpegBitmapEncoder encoder = new JpegBitmapEncoder();
MemoryStream memoryStream = new MemoryStream();
BitmapImage bImg = new BitmapImage();
encoder.Frames.Add(BitmapFrame.Create(bitmapSource));
encoder.Save(memoryStream);
memoryStream.Position = 0;
bImg.BeginInit();
bImg.StreamSource = memoryStream;
bImg.EndInit();
memoryStream.Close();
return bImg;
using System.IO; // namespace for using MemoryStream
private static byte[] ReadImageMemory()
{
BitmapSource bitmapSource = BitmapConversion.ToBitmapSource(Clipboard.GetImage());
JpegBitmapEncoder encoder = new JpegBitmapEncoder();
MemoryStream memoryStream = new MemoryStream();
encoder.Frames.Add(BitmapFrame.Create(bitmapSource));
encoder.Save(memoryStream);
return memoryStream.GetBuffer();
}
// and calling by this example........
byte[] buffer = ReadImageMemory();
bImg.StreamSource = new MemoryStream(memoryStream.ToArray());
而不是bImg.StreamSource = memoryStream;
是否必要?同时移除memoryStream.Close();
答案:是的,使用前者可以确保内存流的内容被正确地复制到新的内存流实例中,而后者则可能会引起异常或未定义行为。移除memoryStream.Close()
也是安全的,因为它不会对内存流产生负面影响。 - ElmobImg.StreamSource = new MemoryStream(memoryStream.ToArray());
这句话是必要的,否则会抛出异常。 - dotNET