Convert RenderTargetBitmap to BitmapImage
Asked Answered
D

2

13

I have a RenderTargetBitmap, I need to convert it to BitmapImage. Please check the code below.

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

In the above code I have used Image.Now I need to use a BitmapImage. How can I do this?

 RenderTargetBitmap bitMap = getRenderTargetBitmap();
 BitmapImage image = new BitmapImage();// This is a BitmapImage
 // how to set bitMap as source of BitmapImage ?
Dowsabel answered 21/12, 2012 at 9:25 Comment(6)
Georges,I need to convert the RenderTargetBitmap to BitmapImage.Dowsabel
Possible duplicate: RenderTargetBitmap to BitmapImage in WPFRectum
something like that : msdn.microsoft.com/en-us/library/aa969819.aspxEstrella
Please explain why exactly you need to have a BitmapImage? RenderTargetBitmap and BitmapImage have a common base class BitmapSource, which provides all the basic bitmap properties.Ellisellison
MSDN: "BitmapImage primarily exists to support Extensible Application Markup Language (XAML) syntax and introduces additional properties for bitmap loading that are not defined by BitmapSource.". Do you really need that?Ellisellison
The questioner doesn't mention it, but you cannot set RenderTargetBitmap.Rotation but you can set BitmapImage.Rotation.Voice
E
23

Although it doesn't seem to be necessary to convert a RenderTargetBitmap into a BitmapImage, you could easily encode the RenderTargetBitmap into a MemoryStream and decode the BitmapImage from that stream.

There are several BitmapEncoders in WPF, the sample code below uses a 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();
}
Ellisellison answered 21/12, 2012 at 10:59 Comment(0)
A
-1
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);
}

This looks as a simpler solution.

Are answered 10/9, 2016 at 22:42 Comment(2)
Please answer in English and ask questions as separate questions (or via comments when you have enough reputation)Soda
This isn't even a solution at all (despite a simpler one), because it does not create a BitmapImage, as was asked for in the question.Ellisellison

© 2022 - 2024 — McMap. All rights reserved.