【问题标题】:Using .DrawToBitmap - how to change resolution of image?使用 .DrawToBitmap - 如何更改图像的分辨率?
【发布时间】:2012-11-02 10:12:10
【问题描述】:

我正在使用DrawToBitmap 将一些标签保存为图像。我想知道如何改变这些图像的分辨率,有没有办法?假设我有一个带有文本的标签,并且我想将其呈现为图像文件(不发布完整代码):

this.label1 = new System.Windows.Forms.Label();
this.label1.AutoSize = true;
this.label1.Font = new System.Drawing.Font("Baskerville Old Face", 36F);
//...
this.label1.Size = new System.Drawing.Size(161, 54);
this.label1.Text = "Output";
//...

//save image:
Bitmap image = new Bitmap(161, 54);
this.label1.DrawToBitmap(image, this.label1.ClientRectangle);
image.Save(@"C:\image.jpg");

这很好,我会得到这样的东西:

分辨率还可以,但是可以提高吗?当我稍微放大这张图片时,我可以看到单个像素是大块:

我知道这很正常,因为它不是矢量图形,这很好。我只是想以某种方式对其进行更改,以便您可以在将单个像素视为大块之前进一步放大。有什么想法吗?

谢谢。

编辑:如果我只使用黑白图像 - 将图像保存为 png 或 gif 会更好吗?

【问题讨论】:

  • 我已将问题的措辞编辑得更清楚。
  • 不,此功能仅在法律与秩序犯罪实验室中可用。在现实生活中你必须给标签一个更大的字体。

标签: c# .net image


【解决方案1】:

这样就可以了,只是增加标签使用的字体大小:

    Bitmap CreateBitmapImage(string text, Font textFont, SolidBrush textBrush)
    {
        Bitmap bitmap = new Bitmap(1, 1);
        Graphics graphics = Graphics.FromImage(bitmap);
        int intWidth = (int)graphics.MeasureString(text, textFont).Width;
        int intHeight = (int)graphics.MeasureString(text, textFont).Height;
        bitmap = new Bitmap(bitmap, new Size(intWidth, intHeight));
        graphics = Graphics.FromImage(bitmap);
        graphics.Clear(Color.White);
        graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
        graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
        graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
        graphics.DrawString(text, textFont, textBrush,0,0);
        graphics.Flush();
        return (bitmap);
    }

【讨论】:

  • 谢谢,这很好 - 问题是:我想继续使用标签和 lable.DrawToBitmap。还是不可能?
  • DrawToBitmap 使用 Label 中的图形,因此您总是得到由 Label 大小定义的文本分辨率。您可以放大传递给 DrawToBitmap 的 Rectangle 但它不会缩放文本。我想唯一的选择是使用“CreateBitmapImage”之类的东西来进行高质量的文本缩放。
【解决方案2】:

您可以通过增加 System.Drawing.Font 的第二个参数的值来实现。

this.label1.Font = new System.Drawing.Font("Baskerville Old Face", 1000F);

【讨论】:

  • 这就是我首先想到的。现在的问题:我必须增加我的图像大小,所以这个字体可以适合它。有没有办法保持图片的 x,y 大小相同但在其中放置更大的字体?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-24
  • 1970-01-01
  • 1970-01-01
  • 2018-02-12
  • 2020-10-23
  • 1970-01-01
相关资源
最近更新 更多