关于 vb.net 打印图片的质量问题(100分求解,不够可加,百分百结贴)

时间:2022-01-04 23:23:16
关于 vb.net 打印图片的质量问题
打印机设置为:
纸张-A6(4.13*5.83英寸)
dpi-600(600*600,每英寸600像素)
理论上是不是最大可打印:2478*3498像素图片啊?(4.13X600 * 5.83X600)

图片像素为:1600*1200
用e.Graphics.DrawImage(PicBox.Image, 0, 0)打印,实际上只打印了图片很小一部份!大部份内容超出页面了

以调试方式运行检查 e As System.Drawing.Printing.PrintPageEventArgs 的参数如下
+ MarginBounds {X = 100 Y = 100 Width = 383 Height = 213} System.Drawing.Rectangle
+ PageBounds {X = 0 Y = 0 Width = 583 Height = 413} System.Drawing.Rectangle
+ PageSettings {[PageSettings: Color=True, Landscape=True, Margins=[Margins Left=100 Right=100 Top=100 Bottom=100], PaperSize=[PaperSize A6 Kind=A6 Height=583 Width=413], PaperSource=[PaperSource  自动选择 Kind=FormSource], PrinterResolution=[PrinterResolution X=600 Y=600]]} System.Drawing.Printing.PageSettings

请问打印的区域是怎样计算出来的呢?重要是不损失打印质量的情况下,如何打印出这张图片呢?

24 个解决方案

#1


该回复于2012-03-23 13:10:19被版主删除

#2


图片打印应该不少人做过吧,广谈无妨

#3


参数调整为:
MarginBounds {X = 10 Y = 10 ...}
Margins=[Margins Left=10 Right=10 Top=10 Bottom=10]
试一试看看。

#4


不是边距问题,图片只打印了一小部份,目测大概只打了图片的1/9左右

#5


离全图差好远

#6


A6纸打满了,也只是打了图片的1/9,打印的清晰度也不够

#7


帮顶,我是用缩图的方法打印的,效果也不理想,dpi只是96,显示还可以,打印出来丑啊。

Dim aBmp As New Bitmap(PicBox.Image)
Dim bBmp As New Bitmap(200,100)
Dim g As Graphics = Graphics.FromImage(bBmp)
g.DrawImage(aBmp,0,0,bBmp.Width+1,bBmp.Height+1)
g.Dispose()
e.Graphics.DrawImage(bBmp, 0, 0)

#8


引用 7 楼 mo555 的回复:
帮顶,我是用缩图的方法打印的,效果也不理想,dpi只是96,显示还可以,打印出来丑啊。
VB.NET code

Dim aBmp As New Bitmap(PicBox.Image)
Dim bBmp As New Bitmap(200,100)
Dim g As Graphics = Graphics.FromImage(bBmp)
g.DrawImage(aBmp,0,0,bBmp.……


多谢,我也试过了,可以解决超出纸张问题,但压缩后打印的图片太……,质量损失太大,600dpi不行的话300dpi也可以,只要质量别太差就行。

#9


96dpi实在太差了,不行啊,有没有质量好点的,原图像素这么高,要压很多才行,质量不行啊。
等待高手……

#10


改了一下打印机的dpi,300dpi和600dpi打出来的范围好象没什么变化啊?
打印范围到底怎么算的?
求解

#11


问题是不是在:PicBox.Image 这个图片呢。

#12


 VB.Net程序设计:快速填充图片到Excel文件里面
http://blog.csdn.net/linjimu/article/details/5611633
打印图片效果还可以,你自己看吧。

#13


引用 11 楼 linjimu 的回复:
问题是不是在:PicBox.Image 这个图片呢。


改为直接取文件数据也一样。
e.Graphics.DrawImage(Image.FromFile("图片\示例图片.bmp"), 0, 0)

#14


引用 12 楼 linjimu 的回复:
 VB.Net程序设计:快速填充图片到Excel文件里面
http://blog.csdn.net/linjimu/article/details/5611633
打印图片效果还可以,你自己看吧。


长江支流 大侠的博客被关了,请问有没有高dpi打印大图的实例代码呢?

#15


用專用控件,他們很專業

#16


引用 15 楼 crackdung 的回复:
用專用控件,他們很專業

在哪里有,给个网址也行

#18


引用 17 楼 crackdung 的回复:
參考:

http://ufo-crackerx.blog.163.com/blog/static/113078778201111158561961/

http://ufo-crackerx.blog.163.com/blog/static/1130787782012219104916610/

http://ufo-crackerx.blog.163.com/blog/stati……


这些控件要钱的,听说你做了破解,能无私贡献一次吗?

#19


问题仍然没解决,继续努力求答案,请各位高手多点提示,打印质量好点的程序不是这么难写吧?

#20


幫你頂,慢慢等,會有 的

#21


楼主苦等这么多天,还没解决问题吗?
估计你打印前没设置图片的dpi,所以图片按96dpi打印,大图就只打了部份出来

Dim bitmap As New Bitmap(PicBox.Image.Width,PicBox.Image.Height)
'设置为300dpi
bitmap.SetResolution(300.0F,300.0F)
Dim g As Graphics = Graphics.FromImage(bitmap)
g.DrawImage(PicBox.Image,0,0,PicBox.Image.Width,PicBox.Image.Height)e.Graphics.DrawImage(bitmap, 0, 0)

#22


今天有時間再破解了一個頂級的圖像控件,,,

是for Silverlight的,少見吧

#23


引用 21 楼 mo555 的回复:
楼主苦等这么多天,还没解决问题吗?
估计你打印前没设置图片的dpi,所以图片按96dpi打印,大图就只打了部份出来

VB.NET code


Dim bitmap As New Bitmap(PicBox.Image.Width,PicBox.Image.Height)
'设置为300dpi
bitmap.SetResolution(300.0F,300.0F)
Dim g ……


Yes!终于解决了,就是这个问题,指定打印图片的dpi!果然是藏龙卧虎的地方啊!
马上结帖,非常感谢各位的热情帮助!谢谢!

#24


学习了。以后有时间可以用到。

#1


该回复于2012-03-23 13:10:19被版主删除

#2


图片打印应该不少人做过吧,广谈无妨

#3


参数调整为:
MarginBounds {X = 10 Y = 10 ...}
Margins=[Margins Left=10 Right=10 Top=10 Bottom=10]
试一试看看。

#4


不是边距问题,图片只打印了一小部份,目测大概只打了图片的1/9左右

#5


离全图差好远

#6


A6纸打满了,也只是打了图片的1/9,打印的清晰度也不够

#7


帮顶,我是用缩图的方法打印的,效果也不理想,dpi只是96,显示还可以,打印出来丑啊。

Dim aBmp As New Bitmap(PicBox.Image)
Dim bBmp As New Bitmap(200,100)
Dim g As Graphics = Graphics.FromImage(bBmp)
g.DrawImage(aBmp,0,0,bBmp.Width+1,bBmp.Height+1)
g.Dispose()
e.Graphics.DrawImage(bBmp, 0, 0)

#8


引用 7 楼 mo555 的回复:
帮顶,我是用缩图的方法打印的,效果也不理想,dpi只是96,显示还可以,打印出来丑啊。
VB.NET code

Dim aBmp As New Bitmap(PicBox.Image)
Dim bBmp As New Bitmap(200,100)
Dim g As Graphics = Graphics.FromImage(bBmp)
g.DrawImage(aBmp,0,0,bBmp.……


多谢,我也试过了,可以解决超出纸张问题,但压缩后打印的图片太……,质量损失太大,600dpi不行的话300dpi也可以,只要质量别太差就行。

#9


96dpi实在太差了,不行啊,有没有质量好点的,原图像素这么高,要压很多才行,质量不行啊。
等待高手……

#10


改了一下打印机的dpi,300dpi和600dpi打出来的范围好象没什么变化啊?
打印范围到底怎么算的?
求解

#11


问题是不是在:PicBox.Image 这个图片呢。

#12


 VB.Net程序设计:快速填充图片到Excel文件里面
http://blog.csdn.net/linjimu/article/details/5611633
打印图片效果还可以,你自己看吧。

#13


引用 11 楼 linjimu 的回复:
问题是不是在:PicBox.Image 这个图片呢。


改为直接取文件数据也一样。
e.Graphics.DrawImage(Image.FromFile("图片\示例图片.bmp"), 0, 0)

#14


引用 12 楼 linjimu 的回复:
 VB.Net程序设计:快速填充图片到Excel文件里面
http://blog.csdn.net/linjimu/article/details/5611633
打印图片效果还可以,你自己看吧。


长江支流 大侠的博客被关了,请问有没有高dpi打印大图的实例代码呢?

#15


用專用控件,他們很專業

#16


引用 15 楼 crackdung 的回复:
用專用控件,他們很專業

在哪里有,给个网址也行

#17


#18


引用 17 楼 crackdung 的回复:
參考:

http://ufo-crackerx.blog.163.com/blog/static/113078778201111158561961/

http://ufo-crackerx.blog.163.com/blog/static/1130787782012219104916610/

http://ufo-crackerx.blog.163.com/blog/stati……


这些控件要钱的,听说你做了破解,能无私贡献一次吗?

#19


问题仍然没解决,继续努力求答案,请各位高手多点提示,打印质量好点的程序不是这么难写吧?

#20


幫你頂,慢慢等,會有 的

#21


楼主苦等这么多天,还没解决问题吗?
估计你打印前没设置图片的dpi,所以图片按96dpi打印,大图就只打了部份出来

Dim bitmap As New Bitmap(PicBox.Image.Width,PicBox.Image.Height)
'设置为300dpi
bitmap.SetResolution(300.0F,300.0F)
Dim g As Graphics = Graphics.FromImage(bitmap)
g.DrawImage(PicBox.Image,0,0,PicBox.Image.Width,PicBox.Image.Height)e.Graphics.DrawImage(bitmap, 0, 0)

#22


今天有時間再破解了一個頂級的圖像控件,,,

是for Silverlight的,少見吧

#23


引用 21 楼 mo555 的回复:
楼主苦等这么多天,还没解决问题吗?
估计你打印前没设置图片的dpi,所以图片按96dpi打印,大图就只打了部份出来

VB.NET code


Dim bitmap As New Bitmap(PicBox.Image.Width,PicBox.Image.Height)
'设置为300dpi
bitmap.SetResolution(300.0F,300.0F)
Dim g ……


Yes!终于解决了,就是这个问题,指定打印图片的dpi!果然是藏龙卧虎的地方啊!
马上结帖,非常感谢各位的热情帮助!谢谢!

#24


学习了。以后有时间可以用到。