我有一个图片框,我需要打印它。
应用程序打印它,这是打印代码:
FileOutputStream fos = new FileOutputStream(file, true);
唯一的问题是图片非常模糊。这是最后的picture。
有谁知道如何解决这个问题?
(P.S最终图像必须为189(宽度)和132(高度))
答案 0 :(得分:0)
您需要明确设置要打印图像的dpi
。
您的输入和所需的输出不具有相同的比率。如果这是你想要的,你需要分别计算宽度和高度的必要dpi
值。
我以一种明确的方式对其进行编码,以使其最易理解。
另请注意,您始终应使用ClientSize
或ClientRectangle
属性,因此您可以自由设置任何BorderStyle
,因为Width
是外部< / strong>宽度..
private void Doc_PrintPage(object sender, PrintPageEventArgs e)
{
float x = e.MarginBounds.Left;
float y = e.MarginBounds.Top;
bmp = new Bitmap(pictureBox1.ClientSize.Width, pictureBox1.ClientSize.Height);
float tgtWidthMM = 50; // 5cm
float tgtHeightMM = 35; // 3.5cm
float tgtWidthInches = tgtWidthMM / 25.4f;
float tgtHeightInches = tgtHeightMM / 25.4f;
float srcWidthPx = bmp.Width; // 633
float srcHeightPx = bmp.Height; // 381
float dpiX = srcWidthPx / tgtWidthInches;
float dpiY = srcHeightPx / tgtHeightInches;
bmp.SetResolution(dpiX, dpiY);
pictureBox1.DrawToBitmap(bmp, pictureBox1.ClientRectangle);
e.Graphics.DrawImage((Image)bmp, x, y);
}
还要将ImageFormat
参数添加到Save
来电:
using System.Drawing.Imaging;
...
bmp.Save(Application.StartupPath + "\\"+ tempstr +"\\" + temp1 + temp2 +
temp3 + temp4 + temp5 + temp6 + ".jpg", ImageFormat.Jpeg);
..或者保存的成功与否也取决于从jpg
创建的来源。
但是,当然,无论你做得对,如果源中的质量不够,结果都无法改变。看看你的例子,我想知道图像的来源是什么?
如果您使用Labels
和TextBoxes
创建文字,那么您真的应该通过打印事件中的DrawString
调用来编写这些文本,因为这只会导致高 - 质量输出。
如果您要将其加载到PictureBox
我想知道您为什么不直接使用源图像。另外:如果您(ab)使用PictureBox
作为缩放工具,则可以预期模糊。不要那样做!而是使用带有源矩形和目标矩形的重载来仅缩放DrawImage
调用!但同样,输入的质量限制了输出的质量!