当我尝试将图像打印到700kb文件的打印机时,它会将120MB数据发送到打印机。我可以看到这个,因为我看到打印机假脱机120MB。为什么会发生这种情况?
以下是PrintDocument.PrintPage的代码
private void PrintPage(object sender, PrintPageEventArgs ev)
{
sw.WriteLine("start,PrintPage," + DateTime.Now.ToLongTimeString());
if (_running && _currentPage != null)
{
RectangleF PrintArea = ev.Graphics.VisibleClipBounds;
RectangleF NewImageSize = new RectangleF();
Double SF = Convert.ToDouble(PrintArea.Width) / Convert.ToDouble(_currentPage.Width);
NewImageSize.Width = Convert.ToInt32(_currentPage.Width * SF);
NewImageSize.Height = Convert.ToInt32(_currentPage.Height * SF);
//You can influence the quality of the resized image
ev.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
ev.Graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Default;
ev.Graphics.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.Default;
//Draw the image to the printer
ev.Graphics.DrawImage(_currentPage, NewImageSize);
_currentPage.Dispose();
_currentPage = null;
//Trace.WriteLine(string.Format("IsFinished {0}, Count {1}", (_queue.IsFinished ? "True" : "False"), _queue.Count));
ev.HasMorePages = (!((_queue.IsFinished) && (_queue.Count == 0)));
}
sw.WriteLine("end,PrintPage," + DateTime.Now.ToLongTimeString());
}
答案 0 :(得分:1)
打印图像大于图像文件有两个原因:
图像文件很可能是压缩的。如果它是JPEG图像,它通常被压缩到它的大小的大约1/10 - 1/20。当您加载图像时,它会被解压缩到10 MB左右。
将图像发送到打印机时,您正在调整图像大小。打印机的分辨率通常很高。如果图像的分辨率大约为300 PPI,并且打印机的分辨率大约为1000 PPI,则图像的大小将调整为原始大小的十倍。
答案 1 :(得分:0)
我对.Net不太了解,但我相信System.Drawing函数是建立在GDI +之上的。 GDI +在CPU上进行大量渲染,并将位图传输到目标设备。在现代系统上,当瞄准图形显示时,这很好。不幸的是,它没有太多机会利用设备的功能(或其驱动程序的功能)。
例如,许多打印机直接支持JPEG和PNG。使用GDI而不是GDI +时,您可以确定打印机是否具有此类支持,并传输原始JPEG并让打印机进行解压缩和调整大小。它仍然是一些工作,你仍然需要那些没有这种支持的打印机的慢速方法。