【问题标题】:Convert RenderTargetBitmap to BitmapImage将 RenderTargetBitmap 转换为 BitmapImage
【发布时间】:2012-12-08 20:56:29
【问题描述】:

我有一个RenderTargetBitmap,我需要将其转换为BitmapImage。请检查下面的代码。

 RenderTargetBitmap bitMap = getRenderTargetBitmap();
 Image image = new Image();// This is a Image
 image.Source = bitMap;

在上面的代码中我使用了Image。现在我需要使用BitmapImage。我该怎么做?

 RenderTargetBitmap bitMap = getRenderTargetBitmap();
 BitmapImage image = new BitmapImage();// This is a BitmapImage
 // how to set bitMap as source of BitmapImage ?

【问题讨论】:

  • Georges,我需要将 RenderTargetBitmap 转换为 BitmapImage。
  • 请解释一下为什么你需要一个BitmapImage? RenderTargetBitmap 和 BitmapImage 有一个共同的基类BitmapSource,它提供了所有基本的位图属性。
  • MSDN:“BitmapImage 的存在主要是为了支持可扩展应用程序标记语言 (XAML) 语法,并为位图加载引入了 BitmapSource 未定义的附加属性。”。你真的需要那个吗?

标签: c# wpf bitmapimage rendertargetbitmap


【解决方案1】:

虽然似乎没有必要将RenderTargetBitmap 转换为BitmapImage,但您可以轻松地将RenderTargetBitmap 编码为MemoryStream,然后从该流中解码BitmapImage

WPF中有几个BitmapEncoders,下面的示例代码使用了一个PngBitmapEncoder

var renderTargetBitmap = getRenderTargetBitmap();
var bitmapImage = new BitmapImage();
var bitmapEncoder = new PngBitmapEncoder();
bitmapEncoder.Frames.Add(BitmapFrame.Create(renderTargetBitmap));

using (var stream = new MemoryStream())
{
    bitmapEncoder.Save(stream);
    stream.Seek(0, SeekOrigin.Begin);

    bitmapImage.BeginInit();
    bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
    bitmapImage.StreamSource = stream;
    bitmapImage.EndInit();
}

【讨论】:

    【解决方案2】:
    private async void Button_Click(object sender, RoutedEventArgs e)
    {
        RenderTargetBitmap bitMap = new RenderTargetBitmap();
        await bitMap.RenderAsync(grid);
        Image image = new Image();// This is a Image
        image.Source = bitMap;
        image.Height = 150;
        image.Width = 100;
    
        grid.Children.Add(image);
    }
    

    这看起来是一个更简单的解决方案。

    【讨论】:

    • 请用英语回答并作为单独的问题提出问题(或在您有足够声誉时通过 cmets)
    • 这甚至不是一个解决方案(尽管一个更简单),因为它不会像问题中所要求的那样创建 BitmapImage。
    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 2011-08-28
    • 2017-12-03
    • 1970-01-01
    • 2018-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多