2016-04-13 13 views
0

データを表示するDVCグラフがあります。私は、グラフをエクスポートするためのボタンを作成しました。ここで"空の"ファイルを作成するPngBitmapEncoder

はコードです:

private void btnExptGraph_Click(object sender, RoutedEventArgs e) 
{ 
    RenderTargetBitmap renderBitmap = new RenderTargetBitmap((int)mcChart.ActualWidth, (int)mcChart.ActualHeight,96d, 96d, PixelFormats.Pbgra32); 
    renderBitmap.Render(mcChart); 

    Console.WriteLine(renderBitmap.ToString()); 

    //JpegBitmapEncoder encode = new JpegBitmapEncoder(); 
    PngBitmapEncoder encode = new PngBitmapEncoder(); 
    encode.Frames.Add(BitmapFrame.Create(renderBitmap)); 

    string filename = "test.bmp"; 

    FileStream fout = new FileStream(filename, FileMode.Create); 

    encode.Save(fout); 

    MessageBox.Show("File Saved Successfully"); 
    fout.Close(); 
} 

だから私の問題は、これが私のファイルは基本的に空であることを除いて、適切に実行されることです。私はサイズが1KBでグラフはない。

MSDNのドキュメントやその他のスタックオーバーフローの例を見てきました。それらのすべてがこの形式に従い、人々はそれが機能すると主張します。私はデバッガで実行して、renderBitmapオブジェクトは、すべての必要なプロパティで正しい高さと重量値を取得しています。何か案は?

+0

ちょうどそれを明確にするために、JpegBitmapEncoderはまた、所望の結果を生成されていませんか? – Clemens

+0

'mcChart.ActualWidth'と' mcChart.ActualHeight'は '0'よりも大きいですか?あなたのチャートコントロールは 'RenderTargetBitmap'にレンダリングできるようにするためにはスクリーン上に実際に表示する必要があります。あるいは' Measure() 'と' Arrange() 'を呼び出さなければなりません。 – bitbonk

+0

あなたは正しいですが、JpegBitmapEncoderは希望の結果も生成していません。私はそれから2KBのファイルを取得していますが、それは単にJPEGファイルが大規模であるためだと思います。 はい、mcChart.ActualWidthとmcChart.actualHeightは0より大きくなります。それぞれ約200と300です。画面に表示されることによって、私はあなたがグラフを見ることができるということを意味すると思いますか?もしそうなら、はい。 – SDSMTKyzer

答えて

0

私の友人はそれを見ていたし、これは我々が上がってきた仕事をして解決した:

 Size size = new Size(mcChart.ActualWidth, mcChart.ActualHeight); 
     if (size.IsEmpty) 
      return; 

     size.Height *= 2; 
     size.Width *= 2; 

     RenderTargetBitmap result = new RenderTargetBitmap((int)size.Width, (int)size.Height, 96, 96, PixelFormats.Pbgra32); 

     DrawingVisual drawingvisual = new DrawingVisual(); 
     using (DrawingContext context = drawingvisual.RenderOpen()) 
     { 
      context.DrawRectangle(new VisualBrush(mcChart), null, new Rect(new Point(), size)); 
      context.Close(); 
     } 
     result.Render(drawingvisual); 

     string filename = "test.png"; 
     FileStream fout = new FileStream(filename, FileMode.Create); 

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

     encoder.Save(fout); 

     fout.Close(); 
     MessageBox.Show("Done"); 
関連する問題