2012-02-04 4 views
0

캔버스 드로잉을 비트 맵으로 저장하려고합니다. 코드가 제대로 작동하지만 도면이 저장되면 캔버스가 부모 응용 프로그램의 왼쪽 상단으로 이동합니다. 내 코드는 다음과 같습니다 :비트 맵 저장시 캔버스 이동

public void SaveBitmap() 
    { 
     Size size = new Size(canvas.ActualWidth, canvas.ActualHeight); 
     canvas.Measure(size); 
     canvas.Arrange(new Rect(size)); 

     RenderTargetBitmap renderBitmap = 
      new RenderTargetBitmap(
       (int)size.Width, 
       (int)size.Height, 
       96d, 
       96d, 
       PixelFormats.Pbgra32); 
     renderBitmap.Render(canvas); 

     using (FileStream outStream = new FileStream("C:\\Users\\Darren\\Desktop\\test.bmp", FileMode.Create)) 
     { 
      BmpBitmapEncoder encoder = new BmpBitmapEncoder(); 
      encoder.Frames.Add(BitmapFrame.Create(renderBitmap)); 
      encoder.Save(outStream); 
     } 


    } 

문제의 원인이되는 행은 canvas.Arrange입니다. 아무도 빛을 발산합니까?

감사합니다.

답변

3

이유는 Rect 생성자에서 어떤 위치도 지정하지 않기 때문에 기본값은 (0,0)입니다.

RenderTargetBitmap 사용에 대한 나의 제안이시키는 당신의 CanvasGrid 내부에 배치 한 다음이 외부 Grid에 UI에 필요한 명시 적 위치를 수행하는 것입니다 내부 Canvas 자연이 부모 Grid(0,0)의 위치를 ​​가정합니다. 에

<Window> 
    <Canvas Left="10" Top="30" /> 
</Window> 

변경을 :

<Window> 
    <Grid Left="10" Top="30"> 
     <Canvas /> 
    </Grid> 
</Window> 

그런 다음 모두 MeasureArrange에 통화를 제거 할 수 당신이있는 경우 예를 들어

. 그러나 자녀 Canvas을 부모 Grid이 아닌 RenderTargetBitmap.Render 방법으로 전달해야합니다.

+0

우수 - 정상적으로 작동합니다. 고맙습니다. –

관련 문제