在 WPF 中,如何确定 RenderTargetBitmap 的 DPI 值?

问题描述 投票:0回答:1

我正在尝试在 WPF 应用程序中的图像控件上绘制位图。图像定义为 800 x 800。

我所做的是,创建一个 DrawingVisual,使用 RenderOpen() 创建一个 DrawingContext,对 DrawingContext 应用更改(在本例中,绘制交替的红色和蓝色 98 x 98 矩形),然后创建一个大小为 800 x 80 的 RenderTargetBitmap还有一些手动输入的 DPI,对其调用 Render(),并将 Image 的源设置为位图。

问题是,除非我知道 DPI 是多少,否则图像不会呈现正确的尺寸。由于某些奇怪的原因,DPI 似乎在 91 左右。

这是创建图像的 C# 代码 - 请注意,目前我将 DPI 硬编码为 96:

        DrawingVisual D = new DrawingVisual();
        DrawingContext DC = D.RenderOpen();
        DC.DrawRectangle(Brushes.White, null, new Rect(0, 0, 800, 800));

        int R, C;
        for (R = 0; R < 8; R++)
        {
            for (C = 0; C < 8; C++)
            {
                Brush TheColor = Brushes.Red;
                if ((R + C) % 2 == 0)
                {
                    TheColor = Brushes.Blue;
                }
                DC.DrawRectangle(TheColor, null, new Rect(C * 100 + 1, R * 100 + 1, 98, 98));
            }
        }
        DC.Close();

        double DPI_X = 96.0;
        double DPI_Y = 96.0;

        RenderTargetBitmap B = new RenderTargetBitmap(800, 800, DPI_X, DPI_Y, PixelFormats.Pbgra32);
        B.Render(D);
        theImage.Source = B;

这是图像控件的 XAML:

<Image x:Name="theImage" HorizontalAlignment="Left" Height="800" Width="800"
                         Margin="0,0,0,0" VerticalAlignment="Top" />

首先,我是否以正确的方式处理这件事?图像显示正确 - 只是尺寸不正确。

假设这是正确的方法,我如何确定屏幕 DPI?我在网上找到的方法要么返回 null 要么返回 96。

 

c# wpf graphics
1个回答
0
投票

我的做法是否正确?

我会说不。您根本不需要位图。

继续使用矢量图形并创建 DrawingImage:

var drawingGroup = new DrawingGroup();

for (int r = 0; r < 8; r++)
{
    for (int c = 0; c < 8; c++)
    {
        var fill = (r + c) % 2 == 0 ? Brushes.Blue : Brushes.Red;
        var drawing = new GeometryDrawing(
            fill,
            null,
            new RectangleGeometry(new Rect(c * 100 + 1, r * 100 + 1, 98, 98)));

        drawingGroup.Children.Add(drawing);
    }
}

var drawingImage = new DrawingImage(drawingGroup);

theImage.Source = drawingImage;
© www.soinside.com 2019 - 2024. All rights reserved.