BitmapSource到BitmapImage

Jai*_*Oro 18 .net c# wpf bitmapsource bitmapimage

我需要解析Clipboard.GetImage()(a BitmapSource)的内容到a BitmapImage.有谁知道怎么做?

Jai*_*Oro 32

我发现了一个干净的解决方案:

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;
Run Code Online (Sandbox Code Playgroud)

  • 是否有必要使用`bImg.StreamSource = new MemoryStream(memoryStream.ToArray());`而不是`bImg.StreamSource = memoryStream;`并删除`memoryStream.Close(); ` (4认同)
  • 你应该在最后添加bImg.Freeze()以允许多线程调用,否则工作完美. (2认同)
  • @DakeForgettoUpvote:对我来说`bImg.StreamSource = new MemoryStream(memoryStream.ToArray());`是必要的,否则就是抛出异常. (2认同)
  • 如果剪贴板中有 PNG 图像怎么办?那么你应该使用 PngBitmapEncoder 吗? (2认同)