2012-12-03 44 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。