【发布时间】:2011-03-17 11:16:38
【问题描述】:
我需要将Clipboard.GetImage()(BitmapSource)的内容解析为BitmapImage。
有谁知道如何做到这一点?
【问题讨论】:
标签: c# .net wpf bitmapimage bitmapsource
我需要将Clipboard.GetImage()(BitmapSource)的内容解析为BitmapImage。
有谁知道如何做到这一点?
【问题讨论】:
标签: c# .net wpf bitmapimage bitmapsource
我找到了一个有效的干净解决方案:
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;
【讨论】:
bImg.StreamSource = new MemoryStream(memoryStream.ToArray());而不是bImg.StreamSource = memoryStream;并去掉memoryStream.Close();
bImg.StreamSource = new MemoryStream(memoryStream.ToArray()); 是必要的,否则它会抛出异常。
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();
【讨论】: