一英寸有多长?

来源:互联网 发布:mac玩dota2怎么全屏 编辑:程序博客网 时间:2024/04/27 23:29

这是去年编写图形程序时的在博客园写的关于象素、英寸、分辨率的一篇文章,今天讨论报表框线的问题时又提到了像素与磅的关系,就转到我们的博客来

------------------

过去在应用WORD等文本编辑软件的时候,发现预览的文档及字体大小,与实际打印出的文档及字体大小差不多。但差多少,是显示器中的比打印的大一点点,还是打印的比显示器中的大一点点?一直没有深究过。最近做图型打印的时候要求比较精确,研究了一下这个问题,也顺便把以前的这些疑惑解决了。 

理解这个问题首先要明白什么是分辨率,分辨率就是在单位英寸中的点数dpi,点数越大分辨率就越高,图像也就越细腻。不过高到一定的程度,人眼也分辨不出来了,一般激光打印机的分辨率是600dpi,而照像馆里冲印数码相片的分辨率是300dpi,(所以卖数码相机的朋友如果没有要打印特别大的照片的需要,没有必要追求高像素,因为打印分辨率定了,像素的提高,只能提高照片面积,对于画质没有改善)

分辨率又分水平分辨率与垂直分辨率,其实就是水平测量每单位英寸中的点数,和垂直测量每单位英寸中的点数 

一般的显示器横竖比约是43,而我们常用的屏幕区域 6404808006001024768也是43,所以显示器的横竖分辨率是大致相同的,如果你用的是宽屏显示器16:9的,那你可以用1280*720的屏幕区域,也可以使横竖分辨率是大致相同。你也可以在一般的显示器上用1280*720的屏幕区域,这时的横竖分辨率即不同了,而且你会看着图像有些瘦长。当然,你也可以把普通显示器调成169的显示区域,来使横竖分辨率相同。 

那么我们用的显示器的分辨率到底是多少呢,不能精确的知道,但能大概的知道。我们就以横竖分辨率相同的情况来粗略计算一下。17的显示器,实际显示区域不到17英寸,就算16英寸,长宽比43,所以宽约是12.8英寸(当然你也可以拿尺子量一量,得一个值,换算成英寸就行),17显示器一般用1024768的屏幕区域,那分辨率就是1024/12.880

15英寸的显示器,除掉边后约是14英寸,用1024*768的分辨率,用上面方法算一下,分辨率约是91 

windows怎么知道我的显示器的分辨率呢?其实windows根本就不知道你显示器的分辨率,他也不关心你显示器的分辨率,他有自己的分辨率,就是96dpi,当然你也可以设置成别的,在显示属性-设置-高级-常规(win2000)中,有个字体大小选项,调整它就能调整windows的分辨率了。Windows中的程序,都是以这个分辨率来进行计算的。你写段程序,画一条线,以像素做单位,长度为96windows认为的1英寸就是这么长,但在我的显示器中(17’  1024*768)这条线就比一英要长。但也差不太多,因为80dpi96dip差距不是太大。 

打印机的情况呢,将刚才的那根96象素长的线打出来,会是1英寸吗?用我单位600dpi的激光打印机打出来的是一根又短,极细的一条小线。呵呵,很有意思吧。因为打印机的分辨率要比显示器的高很多,所以线看起来才又细又小了,大概是显示器中看到的1/6长,1/6 

现在明白些了吧,造成这些的原因就是因为我们一开始用象素做单位画的这条线。如果用英寸做单位,在打印的时候windows的程序就会自动的为我们计算打印的长度,这时1 英寸的线打出来就是1英寸 

.C#  Graphics对象中,PageUnitPageScale就是设置用什么样的单位来绘制图形,比如你设定g.PageUnit = GraphicsUnit.Document1/300英寸);g.PageScale = 1;再画一条96长度的线,这时候打出来的应该是刚才的那条线的2倍长2倍宽,因为刚才是象素做单位,在600dpi的打印机上1象素只有1/600英寸 

总结一下,由于显示器的分辨率、windows的分辨率,打印机的分辨率都各不相同所以长度就有一定的差别,在程序中如果选用实际单位绘图,在打印时,程序会根据打印机分辨率做相应的转换,由于windows不知道显示器的分辨率,所以无法做这种转换,只能是以象素为单位。但对于一般来说,显示器的分辨率又约等于windows的分辨率,所以看到的和打印出的,差别不是很大

  
原创粉丝点击