C#DrawString()分辨率

时间:2018-03-02 15:40:33

标签: c# string gdi

我使用DrawString()内的OnPaint()在PictureBox上绘制一个字符串。它看起来像这样:

enter image description here

现在,当我从Graphics获得的Graphics.FromImage()对象上绘制完全相同的字符串时,字符串更小且不可读。我绘制的图像是5184 x 3456,字体声明如下:

new Font("Arial", 16.0f, FontStyle.Regular, GraphicsUnit.World);

我尝试了所有GraphicsUnit,但它完全没有区别。如何独立于图像分辨率绘制字体?

修改

在这种情况下,我没有看到“绘制代码”是如何相关的,但是在这里你去了:

void DrawOverlay(Graphics g, Font fnt, int containerWidth, int containerHeight)
        {
            if (!OverlayCheck.Checked)
                return;

            float padding = 5.0f;
            float offset = 5.0f;

            StringBuilder sb = new StringBuilder();
            sb.AppendFormat("{0}\n", ISOComboBox.Text);
            sb.AppendFormat("Exp. Time: {0}\n", TVComboBox.Text);
            sb.AppendFormat("Aperture: {0}\n", AVComboBox.Text);

            using (var tb = new SolidBrush(Color.FromArgb(150, 0,0,0)))
            {
                string infoStr = sb.ToString();
                SizeF infoStrSize = g.MeasureString(infoStr, fnt);
                var infoStrDim = new SizeF(infoStrSize.Width + padding * 2, infoStrSize.Height + padding * 2);

                g.FillRectangle(tb, offset, containerHeight - offset - infoStrDim.Height, infoStrDim.Width, infoStrDim.Height);
                g.DrawString(infoStr, fnt, Brushes.White, offset + padding, containerHeight - infoStrDim.Height);

                if (TitleTextBox.Text.Length > 0)
                {
                    var titleStr = SpliceText(TitleTextBox.Text, 15);
                    SizeF titleStrSize = g.MeasureString(titleStr, fnt);
                    var titleStrDim = new SizeF(titleStrSize.Width + padding * 2, titleStrSize.Height + padding * 2);

                    g.FillRectangle(tb, offset, offset, titleStrDim.Width, titleStrDim.Height);
                    g.DrawString(titleStr, fnt, Brushes.White, offset + padding, offset + padding);
                }
            }
        }

一些背景:PictureBox上绘制的图像是来自相机的低分辨率实时流。在OnPaint()内部调用DrawOverlay()来渲染文本覆盖。

当相机拍摄照片时,它具有更高的分辨率(5184 x 3456)。我从该图像(Graphics.FromImage())创建了一个图形上下文 再次DrawOverlay()。这次文本更小,这是因为更高的分辨率。我希望两个图像中的文本大小相同。

实时取景有96/96 dpi(DpiX,DpiY),而高分辨率图像有72/72。所以我需要相对于dpi缩放字体。

0 个答案:

没有答案