繁体   English   中英

增加图像的分辨率(dpi)

[英]Increase the resolution (dpi) of an image

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

我有一个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的方法 )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM