2013-10-28 35 views
1

我想使用RenderTargetBitmap將UserControl呈現爲位圖,而無需爲其寫入XAML。當我這樣做時,我會得到一張空白圖片,我是否錯過了一個關鍵步驟?在代碼中呈現UserControl而不是在XAML中

ValTool.Controls.VideoFisheyeOverlayControl vfoc = new Controls.VideoFisheyeOverlayControl(); 
vfoc.Width = (int)this.VideoContainer.ActualWidth; 
vfoc.Height = (int)this.VideoContainer.ActualHeight; 
vfoc.FieldsOfView=this.FieldsOfView; 
vfoc.CountLines = this.CountLines; 

vfoc.UpdateLayout(); 
vfoc.InvalidateVisual(); 

RenderTargetBitmap visual = new RenderTargetBitmap((int)this.VideoContainer.ActualWidth, (int)this.VideoContainer.ActualHeight, 96, 96, PixelFormats.Pbgra32); 
visual.Render(vfoc); 
var finalImage = BitmapFrame.Create(visual); 
// Encoding the RenderBitmapTarget as a PNG file. 
PngBitmapEncoder png = new PngBitmapEncoder(); 
png.Frames.Add(BitmapFrame.Create(finalImage)); 
using (Stream stm = File.Create(@"new.png")) 
{ 
    png.Save(stm); 
} 

回答

3

相反UpdateLayout請你要叫MeasureArrange把佈局完成:

var width = VideoContainer.ActualWidth; 
var height = VideoContainer.ActualHeight; 

vfoc.Measure(new Size(width, height)); 
vfoc.Arrange(new Rect(0, 0, width, height)); 
vfoc.InvalidateVisual(); 
相關問題