首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从代码创建的图像,打印时看起来像像素。

从代码创建的图像,打印时看起来像像素。
EN

Stack Overflow用户
提问于 2018-03-27 07:13:19
回答 1查看 174关注 0票数 0

我正在尝试从一个程序创建的图像打印40x40毫米标签。

标签上必须有文字和徽标。因为标签是相当小的,我发现自己在摆弄如何做适当的烟雾,反别名等。

我尝试过multipl设置,但我不确定这是否是正确的方法。

首先,我绘制容器位图:

代码语言:javascript
复制
private Bitmap DrawLabelCircle()
{
    var labelImage = new Bitmap(152, 152);

    using (Graphics gfx = Graphics.FromImage(labelImage))
    {
        var pen = new Pen(Color.Black, 1);
        gfx.SmoothingMode = SmoothingMode.AntiAlias;
        gfx.DrawEllipse(pen, 1, 1, 150, 150);
    }

    return labelImage;
}

然后我在容器位图上覆盖不同的文本片段。

代码语言:javascript
复制
private Bitmap DrawDistributorTextRectangle(string text)
{
    var bitmap = new Bitmap(113, 113);

    var rectangle = new Rectangle(0, 0, 110, 110);

    using (Graphics gfx = Graphics.FromImage(bitmap))
    {
        gfx.SmoothingMode = SmoothingMode.AntiAlias;
        gfx.InterpolationMode = InterpolationMode.HighQualityBicubic;
        gfx.PixelOffsetMode = PixelOffsetMode.HighQuality;

        var font = new Font(FontFamily.GenericSansSerif, 5, FontStyle.Regular, GraphicsUnit.Point);
        var brush = new SolidBrush(Color.Black);

        gfx.TextRenderingHint = TextRenderingHint.AntiAlias;
        gfx.DrawString(text, font, brush, rectangle);
    }

    bitmap.RotateFlip(RotateFlipType.Rotate270FlipNone);

    return bitmap;
}

将该文本覆盖在先前创建的位图上。

代码语言:javascript
复制
private Bitmap DistributorTextOverlay(Bitmap source, Bitmap overlay)
{
    var result = new Bitmap(source.Width, source.Height);

    var graphics = Graphics.FromImage(result);
    graphics.CompositingMode = CompositingMode.SourceOver;
    graphics.SmoothingMode = SmoothingMode.HighQuality;

    graphics.DrawImage(source, 0, 0);
    graphics.DrawImage(overlay, 120, 0);

    return result;
}

还有我救了它。

代码语言:javascript
复制
var imageCodecInfo = ImageCodecInfo.GetImageEncoders().First(encoder => encoder.MimeType == "image/png");

var encoderInfo = new EncoderParameters() { Param = { [0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L) } };

image.SetResolution(203, 203);
image.Save("img.png", imageCodecInfo, encoderInfo);

这里最大的挑战是,我得到的图像实际上看起来很好,所有的事情都考虑到了。

但是当我把它打印出来的时候,它看起来很像像素。

在保存最终结果之前,我真的想给出一些提示,说明我应该应用于所有这些位图的设置,以及我保存的最终图像应该应用什么设置。

我绝不是一个.NET图形专家,所以所有的帮助都非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-27 13:08:03

40毫米是1.5748英寸。因此,如果您计划以300 dpi分辨率打印它,则位图应为1.5748*300 = 472像素,而不是152个像素。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49506497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档