photoshop图像点运算算法揭秘
今天写一个直方图规定化的程序,为了得到一副和原来有所不同的bmp图片,我就使用photoshop 7.0对bmp图像进行了均衡化操作,并改了亮度和对比度。我那个直方图规定化程序要用到这个改变后的bmp图片的直方图,我使用这个ps过的Bmp图片进行实验,结果不正确。经过检测,我发现ps过的图片的直方图居然和没有ps过的图片的直方图是一样的,这个发现让我大吃一惊!
bmp图片的格式我是了如指掌的,是不是ps以某种方式记录了它的更改操作呢?我比较了下ps前和ps后的图片的大小,结果发现ps后图片大小大了两个字节。用UltraEdit打开看了下十六进制的数据,发现原来是ps后的图片末尾被ps添加了两个字节的零。这两个字节的零不会对亮度和对比度起任何作用,那么到底什么改变了亮度和对比度呢?
我继续对比十六进制数据,发现ps前后位图数据没有任何变化(直方图一样侧面验证了这个想法)。然后查看位图调色板(颜色表),终于发现了大的不同。ps后的图片的调色板里面的值不是常用的8bit位图的调色板里面的值,通常我们写8bit位图的时候调色板的值就是(0,0,0,0) (1,1,1,0) (2,2,2,0)…….但是ps过的图片的调色板并不是这样的。原来,ps里面对图像进行全局的点运算,比如直方图均衡化,调整亮度和对比度,等等全局的点运算,都是直接对调色板进行操作。ps高效运算的秘密就在这里,它只需要调整这256个调色板项目的值,而不需要对每一个像素进行操作,就能得到正确的结果。那么为什么我得到的直方图没有变化呢?原因就是我默认它的调色板是传统的调色板了。ps里面显示的直方图以及亮度对比度信息则是全新的值,因为它计算亮度对比度的时候用到了调色板的值。
ps的这种算法给了我很大的启发,一个小小的变通,带来的是程序效率的大大提升。当然,如果改变了调色板的值,那么我们的读取和写入函数也要做相应的改变了,正确的读取和写入bmp图像的函数的写法必须考虑到调色板的内容。当然,对于24bit以及32bit的bmp的图像ps是不能用这种方法来高效的运算的。
建议继续学习:
- 谁说设计师不会写代码?—Photoshop脚本语言简介 (阅读:3383)
- 网页设计师应该知道的9个Photoshop小技巧 (阅读:2880)
- 将小型、现代的产品主页由psd转换成XHTML/CSS模板 (阅读:2614)
- 关于Fireworks 和Photoshop两者之间图片优化的比较 (阅读:2363)
- Photoshop图标(icon)设计分享 (阅读:2121)
- 用Photoshop设计一个小型、现代的产品主页 (阅读:1994)
- 如何用photoshop绘画真实足球鞋 (阅读:1819)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:邓安良 来源: 邓安良的网络日志
- 标签: photoshop 图像点运算
- 发布时间:2013-01-16 14:22:57
- [55] Oracle MTS模式下 进程地址与会话信
- [55] IOS安全–浅谈关于IOS加固的几种方法
- [54] 如何拿下简短的域名
- [53] android 开发入门
- [52] Go Reflect 性能
- [52] 图书馆的世界纪录
- [49] 读书笔记-壹百度:百度十年千倍的29条法则
- [48] 【社会化设计】自我(self)部分――欢迎区
- [38] 程序员技术练级攻略
- [32] 视觉调整-设计师 vs. 逻辑