2012-12-21 2 views
8

저는 RenderTargetBitmap입니다. BitmapImage으로 변환해야합니다. 아래 코드를 확인하십시오.RenderTargetBitmap을 BitmapImage로 변환

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

위 코드에서 Image.Now를 사용하여 BitmapImage를 사용해야합니다. 어떻게해야합니까? 그것은 BitmapImage으로 RenderTargetBitmap를 변환하는 데 필요한 될 것 같지 않지만

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

Georges, RenderTargetBitmap을 BitmapImage로 변환해야합니다. – sharmila

+0

가능한 중복 : [RenderTargetBitmap to BitmapImage to WPF] (http://stackoverflow.com/questions/3361579/rendertargetbitmap-to-bitmapimage-in-wpf) – khellang

+2

그런 식으로 : http://msdn.microsoft.com/en -us/library/aa969819.aspx – GeorgesD

답변

14

, 당신은 쉽게 MemoryStreamRenderTargetBitmap을 인코딩하고 스트림에서 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(); 
} 
+0

MSDN에서 hte 이미지가 살아있는 한 스트림을 열려 있어야한다고 말하므로 문제가있을 수 있습니다. using 블록을 떠나기 전에 가능한 해결책은 Clone() 또는 WriteableBitmap 및 Freeze를 사용하여 이미지에서 스트림의 연결을 끊는 것입니다. –

+0

re : 필요하다면 하나의 유형이 있고 다른 유형에만 존재하는 메소드 나 특성을 호출 할 때 필요합니다. 예 : RTB.Render 또는 BI.Rotation. BitmapSource에서 파생 된 사실은 훌륭하지만 중요하지 않습니다. –

+0

@JesseChisholm'BitmapCacheOption.OnLoad'가 설정되어있을 때 스트림을 열어 둘 필요가 없습니다. 비고 [여기]를 참조하십시오 (http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapimage.cacheoption.aspx) :'닫으려면 CacheOption을 BitmapCacheOption.OnLoad로 설정하십시오. BitmapImage를 만드는 데 사용 된 스트림입니다. 그리고 "하나의 유형이 있고 다른 유형에만 존재하는 메소드 나 특성을 호출하려고 할 때 필요합니다."아주 명확하지만 OP는 특별한 용도를 명시 적으로 언급하지 않았으며 이에 관한 나의 질문에 대답하지 않습니다. – Clemens

-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); 
} 

이것은 간단한 해결책으로 보인다.

+1

영어로 답변하고 별도의 질문으로 질문을하십시오. (또는 평판이 충분할 때 의견을 말하십시오.) – YakovL

+0

질문에 대한 답변으로 BitmapImage를 만들지 않기 때문에 해결책이 전혀 없습니다. 질문에. – Clemens