2012-12-03 42 views
0

我有一个WPF画布,我想制作位图。将WPF画布渲染为特定大小的位图

具体来说,我想在300dpi的位图上渲染它实际大小。 画布上的对象的“实际大小”是10 device independent pixels = 1" 在现实生活中。 从理论上讲,WPF与设备无关的像素是96DPI。

我花了几天试图让这个工作,我来了。最多狼狈

我的理解是,一般的程序大致是:

var masterBitmap = new RenderTargetBitmap((int)(canvas.ActualWidth * ?SomeFactor?), 
              (int)(canvas.ActualHeight * ?SomeFactor?), 
              BitmapDpi, BitmapDpi, PixelFormats.Default); 
masterBitmap.Render(canvas); 

而且,我需要到画布上的LayoutTransform设置的ScaleTransform SomeOtherFactor,然后做了测量和画布的安排?到?SomeDesiredSize?

我卡在什么是什么使用的值?SomeFactor ?, SomeOtherFactor?和?SomeDesiredSize?做这个工作。 MSDN documentation没有指出使用什么因素。

+0

你有没有得到任何解决方案? –

回答

0

我使用此代码以1:1的像素精度显示图像。

double dpiXFactor, dpiYFactor; 
Matrix m = PresentationSource.FromVisual(Application.Current.MainWindow).CompositionTarget.TransformToDevice; 
if (m.M11 > 0 && m.M22 > 0) 
{ 
    dpiXFactor = m.M11; 
    dpiYFactor = m.M22; 
} 
else 
{ 
    // Sometimes this can return a matrix with 0s. 
    // Fall back to assuming normal DPI in this case. 
    dpiXFactor = 1; 
    dpiYFactor = 1; 
} 

double width = widthPixels/dpiXFactor; 
double height = heightPixels/dpiYFactor; 

不要忘记在控件上启用UseLayoutRounding。