【问题标题】:Increase the resolution (dpi) of an image提高图像的分辨率 (dpi)
【发布时间】:2012-07-25 11:10:30
【问题描述】:

我不确定如果没有一些第三方库这将是多么可行,但这里是:

我有一张 450x900 大小的图片,我正在尝试打印。
问题是,我用来打印的方法是将原始数据发送到打印机。
图像分辨率为96dpix96dpi,打印机以203dpi运行。
所以...图像变小了。

我需要增加图像的 dpi 才能以“真实”尺寸打印。

Bitmap b0 = LoadBitmap();

//I need to rotate it because for some odd reason it prints backwards and upside down.
b0.RotateFlip(RotateFlipType.Rotate180FlipX);

//Set a new resolution, 203dpi
b0.SetResolution(203, 203);

//I need to save and reload the bitmap, because RotateFlip compresses it.
//(annoying as hell, took me ages to figure out why it wasn't working.)
Stream imgStream = new MemoryStream();
b0.Save(imgStream, ImageFormat.Bmp);
b0 = new Bitmap(imgStream);

//get my byte array
ImageConverter converter = new ImageConverter();
byte[] imageData = (byte[])converter.ConvertTo(b0, typeof(byte[]));

所以,相当直截了当。 但是 SetResolution(...) 实际上似乎并没有做任何事情。 图像打印的大小完全相同,生成的字节数组大小完全相同。

所以我正在尝试弄清楚它实际上在做什么。
但我想它需要用额外的像素填充所有图像数据才能做我想做的事?

如果这不是一种实用的方法,是否有一种简单的拉伸方法或类似方法可以用来获得所需的效果?

【问题讨论】:

    标签: c# image bitmap zpl


    【解决方案1】:

    为什么不把你的图片放大:

            System.Drawing.Bitmap b0 = LoadBitmap();
            double scale = 203/96;
            int width = (int)(b0.Width * scale);
            int height = (int)(b0.Height * scale);
            System.Drawing.Bitmap bmpScaled = new System.Drawing.Bitmap(b0,width, height);
    

    【讨论】:

    • 谢谢,这正是我所需要的。
    【解决方案2】:

    您必须了解,仅更改位图的分辨率 (dpi) 对其像素内容没有任何影响。对于位图,“分辨率”只是一个元数据。真正重要的是像素大小。

    因此,如果您希望您的图片在打印中更大,您将不得不更改打印机分辨率或缩放您的图像(例如,使用Grzegorz's method)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-24
      相关资源
      最近更新 更多