2011-06-01 91 views
4

在C#/ WPF應用程序中,我有一個DataChart對象,我需要將其保存到圖像。目前,該對象被添加到一個固定文檔,並正確地使用下面的代碼顯示對固定文檔:將WPF可視化對象渲染爲圖像產生純黑色圖像

VisualBrush chartBrush = new VisualBrush(chart); 
Rectangle chartRect = new Rectangle(); 
chartRect.Height = chartClone.Height; 
chartRect.Width = chartClone.Width; 
chartRect.Fill = chartBrush; 
AddBlockUIElement(chartRect, textAlignment); 

然而,而不是將其添加爲一個塊的固定文檔,我現在需要簡單地保存圖像到磁盤。我試着做以下幾點:

RenderTargetBitmap bmp = new RenderTargetBitmap((int)chart.Width, (int)chart.Height, 96, 96, PixelFormats.Default); 
bmp.Render(chart); 
PngBitmapEncoder image = new PngBitmapEncoder(); 
image.Frames.Add(BitmapFrame.Create(bmp)); 
using (Stream fs = File.Create("TestImage.png")) 
{ 
    image.Save(fs); 
    fs.Close(); 
} 

然而,這只是給了我在我的圖表的大小實心黑色圖像,我想不通爲什麼。

所以我的問題是,有誰知道更好的方法來把DataChart對象轉換成我可以保存的PNG或BMP圖像?我嘗試過從VisualBrush或Rectangle獲取圖像,但除了上述內容外,還沒有發現任何東西,這似乎是我所需要的。

非常感謝!

+1

壞消息替換該行

image.Frames.Add(BitmapFrame.Create(BitmapRender)); 

是我敢肯定,這是一個驅動程序/圖形卡問題,因爲它應該工作。嘗試更新您的驅動程序或嘗試在另一臺計算機(或不同的操作系統)上使用您的代碼。仍然在努力一些好消息:) – Blindy 2011-06-01 17:43:26

回答

0

看看你是否可以用下面的代碼工作:

VisualBrush target = new VisualBrush(element); 
DrawingVisual visual = new DrawingVisual(); 
DrawingContext dc = visual.RenderOpen(); 
dc.DrawRectangle(target, null, new Rect(0, 0, 
    width, 
    height)); 
dc.Close(); 

RenderTargetBitmap bmp = new RenderTargetBitmap(
    (int)width, 
    (int)height, 96, 96, PixelFormats.Pbgra32); 
bmp.Render(visual); 
+1

這讓我完全一樣的東西 - 一個巨大的,堅實的黑色矩形。 – JToland 2011-06-01 17:20:36

0

這樣的

image.Frames.Add(BitmapFrame.Create(bmp)); 
+0

我很抱歉,這實際上是一個錯字 - 我已經有了它,當我問這個問題時它已經改變了。感謝您的收穫! – JToland 2011-06-01 17:13:17

+0

我在我的項目中使用了這樣的代碼http://pastebin.com/up3JGuFw,它的工作原理非常完美。 – Eugen 2011-06-01 18:43:41