2011-11-16 87 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而不是重新创建它的每一个的时间。