BMP与DPI

本文介绍了DPI的概念及其与图像精度的关系,探讨了BMP文件格式的组成部分,并通过一个实际问题——如何将BMP文件的DPI提高到300——深入理解DPI与图像尺寸变化之间的联系。通过修改BMP文件头的biXPelsPerMeter和biYPelsPerMeter属性,实现了DPI的调整,但图像像素总数不变,导致尺寸相应缩小。

     最近在工作中遇到了关于图像处理相关的问题,这部分之前一直都一知半解的,尽管自己其实也算是做和打印机相关的内容,但这部分的基础知识还是欠缺很多的。

      基本情况是这样的,我们做一个CT图像的接收转换服务,最终输出到打印机之前,需要由其他人对这个图像进行加工处理,其实就是将CT图像中的病人信息等内容写入到图像内容上去,之前来来回回几次验证性测试搞了个人仰马翻,因为这个不是主要的方向,所以放给我的时间就特别少,恨不得今天告诉你,明天就要交程序出来那种,要是验证不通过也是不成的,我底层是用DCMTK这个库的, 当时编译也花了我很长时间,这个就不说了。总之在认为我已经搞定的时候,忽然我的上司接到一封邮件,转给我们说我们转换生成的BMP文件的DPI只有96,而打印机输出最高可以到1200DPI云云,总之就是认为我们的生成的图片精度不够高。

      什么叫DPI,在我印象中只记得它确实与图像的精度有点关系,但具体的关系又是什么呢?百度之Google之,以下的答案仅供参考,如有错漏请及时通知我!

      Dots Per Inch的缩写。每英寸所打印的点数或线数,用来表示打印机打印分辨率。这是衡量打印机打印精度的主要参数之一。一般来说,该值越大,表明打印机的打印精度越高。

  dpi是指单位面积内像素的多少,也就是扫描精度,目前国际上都是计算一平方英寸面积内像素的多少。dpi越小,扫描的清晰度越低,由于受网络传输速度的影响,web上使用的图片都是72dpi,但是冲洗照片不能使用这个参数,必须是300dpi或者更高350dpi。例如要冲洗4*6英寸的照片,扫描精度必须是300,那么文件尺寸应该是(4*300)*(6*300)=1200像素*1800像素。

      以上的内容摘自百度百科,关于这个定义在网上到处都可以搜索的到,意思嘛,其实也不难理解,就是在一定的单位,多半是英寸内可以打印的点数。而这个又和图片的精度有什么关系呢?其实想想应该也不难,觉个不恰当的例子,你把我们平时的用户头像的GIF文件放到到屏幕墙纸的时候,那图像质量是不是下降了呢?从我们看到的一定单位内用来表现图片的像素点是不是少了呢,恩,大概意思就是这样吧。

      而这里另外的一个主角就要上场了,BMP文件,一个我熟悉又不熟悉的文件格式,我平时只是很概念化的认为他是无压缩的,图片质量高,图像的体积大,仅此而已,再次百度之Google之,以下摘录一些关于BMP的内容:

  典型的BMP图像文件由四部分组成:

  1:位图文件头数据结构,它包含BMP图像文件的类型、显示内容等信息;

  2:位图信息数据结构,它包含有BMP图像的宽、高、压缩方法,以及定义颜色等信息;

  3:调色板,这个部分是可选的,有些位图需要调色板,有些位图,比如真彩色图(24位的BMP)就不需要调色板;

  4:位图数据,这部分的内容根据BMP位图使用的位数不同而不同,在24位图中直接使用RGB,而其他的小于24位的使用调色板中颜色索引值。

       看起来好像有点晕,恩,我们先看最后的位图数据,就我个人理解来看,RGB信息是我们所熟知的,一般表示一个点的信息通过这三个数字就可以完成,而这三个数字也恰好可以表示一个像素点的颜色信息,而把他们看成一个整体的话,一个512像素*512像素的图像是不是可以看做一个二维数组,而每个像素点的颜色信息由RGB的颜色信息来表示?恩,现在我是这样理解的,如果有错误,定马上来更改。

        位图数据搞定了已经,那前三个数据结构是什么意思呢?程序员还是用程序来说话比较合适吧,这里请参考

       http://blog.sina.com.cn/s/blog_531028f00100d422.html

       这里有一个完整的BMP生成的程序,写的还挺不错的,佩服佩服!

       已经到这里的时候,我已经算是稍微了解了一些BMP的知识了,但和DPI又有什么关系,回到开头的问题,那究竟能不能提高DPI到300呢,而到300究竟有意义吗?其实我们从DPI的定义上已经了解了,其实就算是把DPI提高了,每指定单位的点数提高了,而总的点数仍然保持不变,整个图像的必然会缩小,在事实已经很明显的时候,我的Team Leader也已经了解了准备去回信的时候,我却是一个不信邪的人,看着生成的BMP文件的那个96DPI怎么看怎么不顺眼,到底怎么着才能变成300呢?其实很简单,还是在刚才那篇文章上的提到的关于BMP文件的头里面有这样两个属性

        在位图属性的第二部分数据信息里biXPelsPerMeterbiYPelsPerMeter,从命名上已经可以看出来分别是指在X轴和Y轴上每米有多少点,而DPI不是指英寸吗?而英寸和米的换算单位是多少?我的像素有多少,好吧,这里应该很明显了,将这个值设置后,我的BMP果然DPI上去了,尺寸果然减少了,像素还是没有改变,也就这样吧。哪天把我后来改的程序也一起放上来吧~

    以上有任何内容侵犯您的版权,请及时联系我!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值