2012-07-25 46 views
3

我不知道如何可行,这将是没有一些第三方库的分辨率(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(...)实际上并没有做任何事情。 图像打印的尺寸完全相同,所得到的字节数组大小完全相同。

所以我试图找出它实际上在做什么。
但我想这将需要填补所有的图像数据与额外的像素做我想做的事情?

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

回答

8

为什么不扩大你的形象,以更大:

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

谢谢,这正是我需要的。 – 2012-07-25 14:02:15

+0

@jb。比标记我的帖子为答案。 – 2012-07-25 17:29:59

+0

抱歉,我认为我标记了延迟。现在有:) – 2012-08-28 12:50:50

3

你必须明白,简单地改变分辨率(dpi)的位图无助于它的像素内容。对于位图“分辨率”只是一个元数据。真正重要的是像素大小。

所以,如果你想让你的照片更大in print你必须更改打印机分辨率或缩放图像(例如,使用Grzegorz's method)。