如何知道100像素的线段实际打印出来是多宽

yifawu100 2019-01-19 10:53:04
如题所示,屏幕像素数为单位的图像,实际打印时的大小,这是如何计算的
...全文
236 点赞 收藏 17
写回复
17 条回复
yifawu100 2019年01月25日
是的, PrintPage 事件中看到的,

300 像素的点, 600DPI,HP打印机 打印质量 FastRes 600,

怎么知道实际打印的宽度呢?
回复 点赞
xuzuning 2019年01月25日
你是在 PrintPage 事件中看到的吗? dpi 是 像素/英寸,按比例计算 像素/英寸 * 长度(英寸) 就是需要的像素个数 应该是这样的,改天弄台打印机实测一下
回复 点赞
yifawu100 2019年01月25日
回楼上, Graphics.DpiX=600,
这个值要怎样计算呢?
回复 点赞
xuzuning 2019年01月25日
你至少要看一下 Graphics.DpiX 的值是多少吧?
回复 点赞
yifawu100 2019年01月25日
那么,换一个203dpi的打印机,打印出的长度会长些吗?
回复 点赞
yifawu100 2019年01月25日
1inch =2.54cm=25.4mm
回复 点赞
yifawu100 2019年01月25日
我实测了下,我画300个像素的线,按理说用300DPI的打印分辨率,应是1英寸长,但是实际打印是76MM长度,长了很多
回复 点赞
yifawu100 2019年01月25日
按照版主的说法,很有道理,我画的300像素的线段,打印长度=300x2.54/100=76.2mm
回复 点赞
xuzuning 2019年01月25日
查了资料,并实测了一下 windows 对于激光打印机(DPI=600),每个像素是 英寸/100
        static void prn_PrintPage(object sender, PrintPageEventArgs e)
        {
            
            var g = e.Graphics;
            var k = 100 / 25.4f;
            g.DrawString((sender as PrintDocument).PrinterSettings.PrinterName, font, Brushes.Black, new Point(20, 20));
            g.DrawString(string.Format("X={0}", g.DpiX), font, Brushes.Black, new Point(20, 40));
            g.DrawString(string.Format("Y={0}", g.DpiY), font, Brushes.Black, new Point(20, 60));
            g.DrawLine(Pens.Black, 20, 80, 20 + 200, 80);
            g.DrawLine(Pens.Black, 20, 90, 20 + 60 * k, 90);
            g.DrawLine(Pens.Black, 20, 92, 20 + 100 * k, 92);
回复 点赞
Hello World, 2019年01月25日
图片大小用像素来表示,还有一个属性是分辨率(DPI),就是每英寸分布的点(像素)数量,打印出来的大小就是像素除以分辨率,看看下面这个Photoshop的截图就明白了:

像素为720*720,分辨率为72,打印尺寸为1英寸(2.54厘米)


像素还是720*720,分辨率为300,打印尺寸为2.4英寸(6.1厘米)
回复 点赞
assky124 2019年01月25日
Window默认的是96,打印机一般是300。 PrintDocument是抽象对象,PrintPage事件可以获取到实际的物理大小 我打的断点 PageBounds = {X = 0 Y = 0 Width = 827 Height = 1169} e.Graphics.DpiX = 600
回复 点赞
ttsffgg 2019年01月20日
要算dpi,也就是每英寸点数 看打印机的dpi设置 比如当打印机dpi为300时,每英寸可以打印300个点,那么100像素打印出来就是三分之一英寸 当然上面是不进行任何缩放处理的情况. 我们在上网随便下载一张普通的jpg图片,如果它是100*100像素的话,按照默认设置打印出来宽度一般不会是1/3英寸,而是约1英寸多,这是因为图片本身也有dpi值,通常这个值是96, 也就是每英寸96个点,所以100点自然就是约1英寸多. 打印软件为我们做了换算.换算过程大概是这样的, 1获得图片dip,这里是96 2得到打印设备的dpi值,这里取300 3将图片按照上述两个dpi的比例进行放大,也就是100/96*300 最后得到一个312*312大小的图片,并交给打印机 打印机按照300dpi来打印312*312大小的图片,最后尺寸也是约1英寸多点. 结论,通过dpi的比例来计算最终大小
回复 点赞
xuzuning 2019年01月20日
Graphics 是抽象设备,隔离了具体的物理设备(也就是与实际的打印机无关) 你可通过 Graphics 的 DpiX、DpiY 属性来换算出你需要尺寸
回复 点赞
yifawu100 2019年01月20日
画线函数 g.drawLine(pen,x1,y1, x1+100,y1)
回复 点赞
yifawu100 2019年01月20日
多谢回复,我用的是hp激光打印机,用c#自带的打印预览控件,打印时没有缩放,我实际打印试一下
回复 点赞
xuzuning 2019年01月20日
由 dpi 决定
回复 点赞
平底锅锅锅 2019年01月20日
用画图打开。算出两点最大像素,配合尺寸,比例得出大小。如果有电机,也可以通过位置算出。或者通过专用的测量软件。
回复 点赞
发动态
发帖子
C#
创建于2007-09-28

8.5w+

社区成员

64.0w+

社区内容

.NET技术 C#
社区公告
暂无公告