0

当我尝试将图像打印到打印机以获取 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());

            }
4

2 回答 2

1

打印出来的图片比图片文件大有两个原因:

图像文件很可能已压缩。如果是 JPEG 图像,通常会压缩到其大小的 1/10 - 1/20 左右。当您加载图像时,它会被解压缩到大约 10 MB。

当您将图像发送到打印机时,您正在调整图像大小。打印机的分辨率通常很高。如果图像的分辨率为 300 PPI 左右,而打印机的分辨率为 1000 PPI 左右,则图像的大小将调整为原始大小的十倍左右。

于 2009-07-22T18:48:03.987 回答
0

我对 .Net 了解不多,但我相信 System.Drawing 函数是建立在 GDI+ 之上的。GDI+ 在 CPU 上进行大部分渲染并将位图传输到目标设备。在现代系统上,当以图形显示为目标时,这很好。不幸的是,它并没有留下太多机会来利用设备的功能(或其驱动程序的功能)。

例如,许多打印机直接支持 JPEG 和 PNG。当使用GDI而不是GDI+时,你可以判断打印机是否支持,然后将原始的JPEG文件传输出来,让打印机进行解压和调整大小。这仍然是一些工作,对于那些没有此类支持的打印机,您仍然需要使用慢速方法。

于 2009-08-03T00:17:41.087 回答