提高图像的分辨率(dpi)



我不确定如果没有一些第三方库,这将有多可行,但如下所示:

我有一张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(…)实际上似乎什么都没做。图像打印的大小完全相同,生成的字节数组大小完全相同。

所以我想弄清楚它到底在做什么
但我想它需要用额外的像素填充所有的图像数据才能完成我想要的任务?

如果这不是一个实用的方法,有没有一个简单的拉伸方法或类似的方法可以让我得到想要的效果

为什么不将图像放大:

        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);

您必须明白,简单地更改位图的分辨率(dpi)对其像素内容没有任何影响。对于位图来说,"分辨率"只是一种元数据。真正重要的是像素大小。

因此,如果你想在打印时让图片更大,你必须改变打印机分辨率或缩放图像(例如,使用Grzegorz的方法)。

相关内容

  • 没有找到相关文章

最新更新