2011-11-16 125 views
0

我正在嘗試使用CanvasmyPrintingCanvas)中的一個填充Image。但圖像的寬度比Canvas寬至少兩倍,創建的額外空間又回來了。如果我嘗試另一個CanavasLayoutRoot),它會按預期工作。WriteableBitmap向右側添加黑色填充

我的觀察是在myPrintingCanvas上ActualWidth總是0. LayoutRoot有一個正確的ActualWidth。不知道它是否與額外的填充有任何關係,並且我沒有得到ActualWidthmyPrintingCanvas(使用UpdateLayoutMeasure)。

代碼:

//Code to render the content of myPrintingCanvas 
... 

//Make the WriteableBitmap 
WriteableBitmap myWriteableBitmap = new WriteableBitmap(myPrintingCanvas, null); 

回答

0

您是否嘗試過用一個固定大小的創建WriteableBitmap,然後調用其Render方法來呈現位圖? Canvas有一些奇怪的行爲,因爲它在Silverlight和WPF中的is an anti-pattern並破壞了有關佈局的許多規則。創建一個固定大小WriteableBitmap和渲染它看起來像這樣的代碼:

這種技術的
 int width = 640; 
     int height = 480; 
     WriteableBitmap bmp = new WriteableBitmap(width, height); 
     bmp.Render(myPrintingCanvas, null); 
     bmp.Invalidate(); 

一個優點是,如果你需要獲取多幅圖像,你可以重複使用相同的WriteableBitmap而不是重新創建它的每一個的時間。