`
鸟哥哥
  • 浏览: 98169 次
  • 性别: Icon_minigender_1
  • 来自: 梅州兴宁
社区版块
存档分类
最新评论

鸟哥,再论PNG

阅读更多

  png图片格式定义是20世纪90年代中期的事了。它的IDAT块使用的LZ77算法(java自带的java.util.zip.DeflaterIn(Out)putStream有实现之)也派生出很多算法,很多压缩率都更高,如7z用的LZMA算法,号称最大压缩率算法。在手机资源如此稀缺的情况下,是可以考虑做一些改变。
  png格式,手机游戏,一般png8就足够了,8为2的8次方256,实际上已经浪费了一半,因为它实际只容纳128个颜色,一个byte嘛,128就成-128了。把IHDR里的长度宽度,色深等几个提取出来,把色盘(记为a)提取出来;利用他们用L7zz算法解压出IDAT块(注意可能有几块哦),再还原出原来数据;这些数据是什么?这些数据是一维byte数组(针对png8哈),长度为总像素数(即是图宽乘长)(记之为b),下标index,index % width,index/width就是图中的(x,y),那么a[b[index]*3]就是(x,y)的RGB中的R值,a[b[index]*3+1],a[b[index]*3+2]为G,B值。再根据tRNS确定哪个色是透明的,一般是最后一个色值。
a这块数据,可以把透明的标记成-1或者其他非索引b的就可以了,发现是-1值,就是透明的。把长宽色盘a和b一起用LZMA压缩,省多少空间,很可观吧?
  7z官网上有LZMA压缩和解压缩算法,解压缩算法5个类(当然内部类也有几个,鸟哥观察,人家肯定不是java人员写的)左右,完全可以移植到j2me上。
  这样图片,完全脱离了png格式,可以保护图片,可以省去png标记块名等一些格式上的字节。
  最后使用这些数据时,用Image.createARGB搞定。

分享到:
评论
1 楼 鸟哥哥 2010-12-20  
7z压缩算法要求的内存还是很大的,一般手机没那么大。

相关推荐

    png 库应用png 库 png库 png库 png库 png 库png库 png 库png 库

    png 库应用png 库 png库 png库 png库 png 库png库 png 库png 库png 库应用png 库 png库 png库 png库 png 库png库 png 库png 库png 库应用png 库 png库 png库 png库 png 库png库 png 库png 库png 库应用png 库 png库 ...

    Delphi7可用的PngImage控件 PNG Delphi v.1.564

    Delphi7可用的PngImage控件 PNG Delphi v.1.564,可用于D7显示Png图片。 使用方法:(Delphi 7 使用成功案例) 1、将本包中所有文件复制到开发文件保存的目录中 2、在USES单元中加入pngimage 3、窗体中插入image1...

    Delphi7 PngImage控件 PNGimage for Delph7

    2、在USES单元中加入pngimage 3、窗体中插入image1控件 4、在调用位置,加入如下代码就OK啦! var png: tpngimage; begin png := tpngimage.Create; png.LoadFromFile(getcurrentdir() + '\pic.png'); ...

    BCB组件pngimage,让bcb支持png

    《BCB组件PNGImage:为BCB添加PNG图像支持》 在软件开发中,尤其是在Windows平台上,使用Visual Component Library (VCL) 的Borland C++ Builder(简称BCB)进行编程时,开发者经常会遇到对不同图像格式的支持需求...

    MFC png 图片加载

    在MFC(Microsoft Foundation Classes)框架中加载PNG图片文件,通常需要借助第三方库或Windows API扩展来实现,因为MFC本身并不直接支持PNG格式。PNG(Portable Network Graphics)是一种无损压缩的图像文件格式,...

    apng序列帧png制作工具 APNG apngasm_gui

    apng序列帧png制作工具 APNG apngasm_gui.exe 直接把多个png序列拖到面板中,自动生成APNG动态图片。

    PNG图片宽高一把梭,爆破PNG图片宽高

    PNG(Portable Network Graphics)是一种无损压缩的位图格式,广泛应用在网页设计、软件界面以及图形用户界面中。PNG图片的宽高信息是其元数据的一部分,这些信息存储在PNG图像文件的头部,称为PNG头部标识符(IHDR...

    多张PNG小图合并PNG大图小工具

    "多张PNG小图合并PNG大图小工具"是一个实用程序,它允许用户将多个PNG格式的小图像整合成一个单一的PNG大图像。这个工具的目的是简化工作流程,减少手动操作,并可能提高效率。 PNG(Portable Network Graphics)是...

    使用pnglib库将png转成bmp代码

    本篇文章将深入探讨如何使用pnglib库和zlib库将PNG图像转换为BMP格式,这是一项常见的任务,尤其是在跨平台或低级系统编程中。我们将讨论pnglib库的功能、zlib库的作用,以及如何通过C语言实现这个转换过程。 首先...

    PNG转ICON或ICON转PNG工具

    PNG(Portable Network Graphics)是一种无损压缩的位图格式,广泛应用在网页设计、软件图标、图形用户界面等场景。它支持透明度,可以创建具有Alpha通道的图像,使得背景可以呈现出不同程度的透明。而ICO(Icon)是...

    DelphiPNGImage_delphi_image_image显示png_png_图片_

    在Delphi编程环境中,PNG(Portable Network Graphics)是一种常见的位图格式,因其支持透明度和高压缩率而被广泛使用。然而,Delphi的标准`TImage`控件默认并不直接支持加载和显示PNG图像。因此,为了在Delphi窗体...

    TinyPNG PC版PS插件,专业压缩png

    TinyPNG是一款广受欢迎的图像压缩工具,特别针对PNG格式的图片设计,能够在保持高质量的同时显著降低文件大小。这款工具在PC版Photoshop中以插件形式存在,为设计师和开发者提供了一个高效、便捷的解决方案,以优化...

    delphi使用png图片的示例

    在Delphi编程中,UI界面的设计是至关重要的,而PNG图片因其高质量和透明度特性,常被用于创建精美且具有专业感的用户界面。然而,原生的Delphi Image组件并不直接支持PNG图像格式,这使得开发者需要寻找额外的方法来...

    PngImage处理png图片

    PNG(Portable Network Graphics)是一种无损压缩的位图格式,广泛用于网页和其他数字媒体中,因为它支持透明度和高色彩深度。在.NET框架下,处理PNG图片时,开发者可能会遇到一些困难,因为标准的.NET库可能无法...

    加密PNG转换工具

    PNG(Portable Network Graphics)是一种广泛使用的无损压缩图像文件格式,以其高质量、透明度支持以及跨平台兼容性而受到青睐。在游戏开发和数字媒体领域,PNG图片可能会因为版权保护或者安全需求而进行加密处理,...

    PNGView软件,可以查看带有透明度的png图片

    PNGView软件是一款专为查看带有透明度的PNG图片设计的小型工具,尤其适合那些需要处理或欣赏PNG格式图像的用户。PNG(Portable Network Graphics)是一种常见的位图图像格式,其特点是支持透明度和无损压缩,常用于...

    PNG加密解密工具是什么?加密代码演示.docx

    # PNG加密解密工具 此工具可以加密和解密PNG图片,保护您的隐私。 ## 加密 1. 选择要加密的PNG图片。 2. 输入密码并确认。 3. 点击“加密”按钮。 4. 保存加密后的PNG图片。 ## 解密 1. 选择要解密的PNG图片。 ...

    PB显示PNG图片.zip

    标题 "PB显示PNG图片.zip" 涉及到的技术核心是使用PowerBuilder...总的来说,"PB显示PNG图片.zip"这个压缩包文件提供了一个在PowerBuilder环境中处理和显示PNG图像的解决方案,涵盖了从加载到显示再到打印的全过程。

    PNG_png_

    `.png`文件可能是用作测试的图像资源,比如`icoMedium.png`、`icoFast.png`、`icoSlow.png`和`icoStationary.png`可能代表不同状态或速度的图标,它们可能被用来展示或测试读取PNG图像的功能。 总结来说,这个项目...

    VC6.0使用PNG库读取png图片数据

    在本文中,我们将深入探讨如何在Visual C++ 6.0(简称VC6.0)环境中使用PNG库来读取PNG图像数据。PNG(Portable Network Graphics)是一种无损压缩的位图格式,广泛用于网络和应用程序中。由于VC6.0的年代较早,它并...

Global site tag (gtag.js) - Google Analytics