用户:
密码:
无安全提问
母亲的名字
爷爷的名字
父亲出生的城市
您的一位老师的名字
您个人计算机的型号
您最喜欢的餐馆名称
驾照的最后四位数字
答案:
我要注册
忘记密码
加入收藏
设为首页
开发文档
CNJM首页
业界新闻
手机软件
终端应用
资源下载
EclipseME
CNJM论坛
频道列表
J2ME开发
176篇
服务器端开发
33篇
JAVA语言
71篇
游戏与图形
101篇
WindowsMobile开发
6篇
Symbian开发
61篇
Brew开发
36篇
其它开发平台
6篇
热点文章
PngMate使用教程
55918次
使用JavaMagic进行...
30179次
手机游戏修改(2)工具
20238次
手机游戏修改之浅谈
13047次
手机游戏修改(8)...
12572次
J2ME游戏开发笔记...
12142次
开发手机游戏的一...
11164次
J2ME潜艇大战游戏...
10789次
Java手机游戏编程...
10693次
手机游戏知识扫盲
10535次
手机盗版软件现状分析
10455次
J2ME游戏中的图片处理
10170次
文章搜索
搜 索
按 照
文章关键字
责任编辑
文章标题
文章内容
频 道
全部频道
J2ME开发
服务器端开发
JAVA语言
游戏与图形
WindowsMobile开发
Symbian开发
Brew开发
其它开发平台
打造自由换色的png图片类
编辑:rocks 审核:rocks 文章来源:CSDN博客
关键词:png 发表日期:2006-02-27 12:06:36 浏览次数:7182次
本文版权归原作者,中国JAVA手机网收录本文的目的是让更多人阅读到此文章。转载请注明出处为中国JAVA手机网<www.cnjm.net>
来自:http://www.cnjm.net/tech/article998.html
[转贴自CSDN博客]
想像一下,有一个游戏,里面有很多种颜色的人,图片完全一样,只是人物衣服的颜色不同。比如街霸中真的红色的Ken和假的青色的Ken,它们的图形一模一样,只是颜色换掉了。
这时你会怎么做呢?画好多张图片?拜托,都21世纪了,别做这种没有一点技术含量的工作好不好?聪明的你一定会想,如果可以把里面的红色“替换”成青色就好了。OK,那我们就来替换。
GIF、PNG等很多格式的图片,都是用调色板来记录颜色的。比如记录3号颜色为0xff0000红色,那么我们把3号颜色改为青色的代码,图片中的所有标记为3号颜色的区域都变成青色了。怎么样?说起来好像很简单吧?^_^下面我们用J2ME手机用的最多的png格式的图片来完成这项工作。
首先我们要清楚png图片的格式。
首先是8 byte的png标志。其次是若干个块,每个块有下列结构:
4 byte Length 块的data区的length
4 byte Type 块的类型
length byte Data 块的data
4 byte CRC 块类型和data两个区共length+4字节的CRC校验和
我们感兴趣的块是调色板块,类型区的内容是'P'、'L'、'T'、'E'四个字节,data区是所有颜色按照0xRRGGBB的格式排列,length区的值是颜色数*3。OK,基础知识准备完毕。(CRC校验和的算法和png结构的详细信息可参考http://www.w3.org/TR/PNG-Structure.html)
接下来设计我们的超级牛X的PalettedImage类,首先提供两个工厂方法,一个通过文件名从包中创建图片,另一个直接从byte数组中创建。创建后马上执行analyze方法,得到颜色数、调色板偏移、CRC校验码偏移等值(针对一张图片这些值是不变的)。以后就可以用setColor替换某种颜色或者用setPalette替换整个调色板的所有颜色值了。每次替换颜色后都记得要重新生成正确的CRC校验和,并重新创建图片。
这个类的好处在于不必携带极多的图片资源,而只需要一张图片和若干套调色板信息就好了。缺点在于它会占用一个图片的2倍的内存(imgData数组和image对象),不过你可以在得到新Image后就把PalettedImage释放掉。
来自:http://www.cnjm.net/tech/article998.html
相关文章
极限压缩JAR包中的图片
[2006-07-12]
安全高效的使用PNG图
[2006-03-27]
优化png图片的小工具
[2006-02-27]
PngMate使用教程
[2006-02-15]
最新评论
网站简介
|
关于版权
|
广告服务
|
网站地图
|
联系我们
Copyright © www.CNJM.net, All rights reserved
中国JAVA手机网 版权所有
ICP备案:
京ICP备041452