2017-01-11 4 views
-2

SaveFIleDialog에 문제가 있습니다. stackoverflow에서 몇 단계를 수행했습니다. 문제는 SaveFileDialog를 사용하지 않을 때입니다.이 경우 :SaveFileDialog로 이미지 저장 안 함

private void SaveImage(Canvas canvas, string fileName) 
    { 
     RenderTargetBitmap renderBitmap = new RenderTargetBitmap(4646, 3890, 1500d, 1500d, PixelFormats.Pbgra32); 

     canvas.Measure(new Size((int)canvas.Width, (int)canvas.Height)); 
     canvas.Arrange(new Rect(new Size((int)canvas.Width, (int)canvas.Height))); 

     renderBitmap.Render(canvas); 



     PngBitmapEncoder encoder = new PngBitmapEncoder(); 
     encoder.Frames.Add(BitmapFrame.Create(renderBitmap)); 

     using (FileStream file = File.Create(fileName)) 
     { 
      encoder.Save(file); 
     } 
    } 

저장 단추 이벤트에서 호출하면 작동합니다. 하지만 난이 같이 사용할 때

private void SaveImage(Canvas canvas, string fileName) 
    { 
     RenderTargetBitmap renderBitmap = new RenderTargetBitmap(4646, 3890, 1500d, 1500d, PixelFormats.Pbgra32); 

     canvas.Measure(new Size((int)canvas.Width, (int)canvas.Height)); 
     canvas.Arrange(new Rect(new Size((int)canvas.Width, (int)canvas.Height))); 

     renderBitmap.Render(canvas); 

     SaveFileDialog s = new SaveFileDialog(); 
     s.FileName = "Pic"; 
     s.DefaultExt = ".png"; 
     s.Filter = "Picture files (.png)|*.png"; 

     Nullable<bool> result = s.ShowDialog(); 
     if (result == true) 
     { 
      string filename = s.FileName; 

     } 
    } 

는 모든 파일을 저장하지 않습니다. 조언이 있으십니까? 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

;'? - 첫 번째 예제에서와 같이 대화 상자에서 선택한 이름을 파일 스트림으로 전달하십시오. 대화 상자는 사용자가 선택한 파일 이름 문자열을 제공하며 디스크에 아무 것도 쓸 수 없으며/쓸 수 없습니다. –

답변

2

여전히 비트 맵을 파일에 저장해야합니다. 유일한 차이점은하여 FileStream의 생성자의 인수로의 SaveFileDialog의 파일 이름 속성을 사용한다는 것입니다 : 더`encoder.Save (파일)이 없기 때문에 당신은 * * 저장하지

private void SaveImage(Canvas canvas, string fileName) 
{ 
    SaveFileDialog s = new SaveFileDialog(); 
    s.FileName = "Pic"; 
    s.DefaultExt = ".png"; 
    s.Filter = "Picture files (.png)|*.png"; 

    Nullable<bool> result = s.ShowDialog(); 
    if (result == true) 
    { 
     RenderTargetBitmap renderBitmap = new RenderTargetBitmap(4646, 3890, 1500d, 1500d, PixelFormats.Pbgra32); 

     canvas.Measure(new Size((int)canvas.Width, (int)canvas.Height)); 
     canvas.Arrange(new Rect(new Size((int)canvas.Width, (int)canvas.Height))); 

     renderBitmap.Render(canvas); 

     string filename = s.FileName; 
     PngBitmapEncoder encoder = new PngBitmapEncoder(); 
     encoder.Frames.Add(BitmapFrame.Create(renderBitmap)); 

     using (FileStream file = File.Create(filename)) 
     { 
      encoder.Save(file); 
     } 
    } 
} 
+0

덕분에,이 트릭 :) :)) – AlexDev