做了一段手机游戏移植。有时候碰到游戏的资源文件被做成一个数据文件。想提出来很费事,所以自己写了一个程序来处理。方法就是自定义几个字节。与PNG格式的图片字节相匹配。这样把PNG图片信息提出来
-----------------------------------------------------------------------------------------------------------------------------------------
/*
*数据文件转png图片程序
*@author k7sem
*05年10月12日修改
*/
import java.io.*;
class transfer
{
byte a1 = (byte)0x89; //定义PNG文件头部的匹配参数
byte a2 = (byte)0x50;
byte a3 = (byte)0x4e;
byte a4 = (byte)0x47;
byte a5 = (byte)0x0d;
byte a6 = (byte)0x0a;
byte a7 = (byte)0x1a;
byte a8 = (byte)0x0a;
//------------png file end--------------//png文件尾
byte e1 = (byte)0x49;
byte e2 = (byte)0x45;
byte e3 = (byte)0x4e;
byte e4 = (byte)0x44;
byte e5 = (byte)0xae;
byte e6 = (byte)0x42;
byte e7 = (byte)0x60;
byte e8 = (byte)0x82;
//--------------------------------------
transfer() //transfer的构造
{
}
//从屏幕中输入要转换的文件路径
public String in()//Type a file path and return the path as a String
{
System.out.println("Please type the file path:");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String ss="";
try{
ss = br.readLine();
}catch(Exception e){
e.printStackTrace();
}
return ss;
}
//读取文件路径,进行算法分析,从新写入新文件
public void readFile(String s)//use the file path to contruct a method which is solve the byte of this file and return a byte array
{
byte[] b= new byte[650000]; //定义存放被处理文件的字节数组,一定要比被处理的文件实际大小要大
int i = 0; //返回具体读到了多少个字节
try
{
FileInputStream fs = new FileInputStream(new File(s)); //用文件路径 构造一个文件流
i = fs.read(b); //将读到的byte放入 b的数组中,返回实际读到数i
if(i != -1) //判断文件是否为空
{
System.out.println("The file size is "+i+" byte");
}else
{
System.out.println("The file is empty ");
}
}catch(Exception e){
e.printStackTrace();
}
int h = 0;
boolean head = true;
boolean f = false; //保证每次只查找一次文件尾
int y = 0; //存放文件byte的长度
int headbyte=0;
for(int j=0;j<i;j++) //对所有byte遍历
{
if((a1 == b[j])&&(a2 == b[j+1])&&(a3 == b[j+2])&&(a4 == b[j+3])&&(a5 == b[j+4])&&(a6 == b[j+5])&&(a7 == b[j+6])&&(a8 == b[j+7])) // 判断前8个字节是否为png头部信息
{
if(head) //判断第一个PNG文件从什么位置开始
{
head = false;
headbyte = j;
}
for(int z=j;z<i;z++) //对所有byte遍历
{
if(!f)
{
if((e1==b[z])&&(e2==b[z+1])&&(e3==b[z+2])&&(e4==b[z+3])&&(e5==b[z+4])&&(e6==b[z+5])&&(e7==b[z+6])&&(e8==b[z+7]))//判断后8个字节是否为文件尾
{
y = z-j+headbyte;//满足条件后 将文件尾位置减掉文件头位置再减掉 头部信息位数 所得长度
f=true;
try
{
FileOutputStream fos = new FileOutputStream(new File(".",h+".png"));
fos.write(b,j,y);
h++;
}catch (Exception e){}
}
}
}
f=false;
}
}
System.out.println(h+" files has transfer successful!!");//打印出实际转换了多少个PNG文件
}
public static void main(String[] args)
{
transfer ui = new transfer();//产生transfer 对象
ui.readFile(ui.in()); //执行读取文件的方法
}
}
----------------------------------------------------------------------------------------------------------------------
分享到:
相关推荐
2. 图像数据处理:在转换过程中,需要对图像的像素数据进行操作,这可能包括颜色空间转换(例如从RGB到RGBA),以及适应PNG文件的存储格式。 3. libpng库:`libpng`是一个开源库,专门用于处理.png文件。在这个项目...
6. **命令行模式**:为了支持命令行模式,程序需要接收用户输入的源TGA目录和目标PNG目录。通过解析命令行参数,可以灵活地指定转换的文件或整个目录。 在实际应用中,这个工具可以方便地集成到批处理脚本中,自动...
本教程将详细介绍如何使用GDAL库将TIFF文件转换为更常见的bmp和png格式,并对图像进行压缩,以解决大文件可能导致的内存问题。 首先,我们需要了解GDAL的基本用法。GDAL不仅提供了命令行工具,还有一套C++ API,...
- 该程序解析GIF文件中的每一帧,提取图像数据。 - 对于转换为单张大图,它会将所有帧合并成一个大的PNG图像,通常适用于静态展示或预览。 - 对于转换为连续帧的PNG序列,每一帧都会被保存为单独的PNG文件,便于...
本素材包包含的是“常用图标 32x32 PNG ICO 程序 图标 素材”,这意味着它提供了一系列32像素乘32像素大小的图标,适用于各种程序和应用的开发。 首先,我们来了解图标的基本类型。PNG和ICO是两种常见的图标格式: ...
微信DAT文件是微信应用程序在运行过程中产生的临时缓存文件,主要用于存储聊天记录中的图片、音频、视频等多媒体信息。这些文件通常以二进制格式存储,对于普通用户来说是不可读的,因为它们不是标准的图像格式。...
在本项目中,我们关注的是如何将EMF图片转换为PNG格式,这通常涉及到图像处理和编程技术。`freehep`是一个开源的Java库,专门用于2D图形和图像处理,其中包括了将EMF转换为其他格式的功能。`freehep`库是由Heiko ...
总结来说,将PNG图片转换为YUV格式涉及图像读取、颜色空间转换、处理Alpha通道(如果存在)、存储YUV数据以及输出YUV文件等多个步骤。C++通过利用libpng和OpenCV等库,可以高效地完成这个过程。了解并实践这一转换,...
在设计和开发过程中,有时需要将PNG图片转换为ICO格式,以便在桌面快捷方式、程序图标等地方使用。"PNG转ICO图片工具"就是专门为此目的设计的软件,它简化了这一转换过程,让操作变得极其简单,适合对计算机技术不太...
PNG(Portable Network Graphics)是一种广泛使用的无损压缩的位图图像格式,而BIN(Binary File Format)则是一种二进制文件格式,常用于存储固件、软件镜像或游戏数据等。"PNG转换为BIN"的过程是将PNG图像的数据...
5. 兼容性:转换后的PNG文件应能在各种平台和应用程序中无缝使用,无论是在Windows、Mac还是Linux系统,或者在Photoshop、GIMP等图像编辑软件中。 6. 性能优化:由于可能涉及大量的文件转换,dds2png工具需要具有...
通常,这样的程序会包括读取WAS文件的二进制数据,解析其内部结构,提取图像数据,并将这些数据转换成PNG格式所要求的像素数组。在C#中,这可能涉及到使用System.IO类来处理文件流,使用System.Drawing或System....
本文将深入探讨PNG和ICO格式的特点、转换需求以及如何使用“PNG-ICO 图标格式互转工具”进行转换。 1. PNG格式详解: - 无损压缩:PNG采用无损压缩方式,保存后的图像不会出现质量损失。 - 透明度支持:PNG支持24...
2. **添加文件**:在程序界面中,有一个“添加文件”或类似选项,用户可以通过这个功能将需要转换的PNG图片导入到软件中。 3. **选择输出目录**:转换后的JPG图片会保存在指定的输出目录下,用户应提前设置好这一...
PNG(Portable Network Graphics)是一种无损压缩的位图文件格式,广泛用于网页设计、软件界面以及应用程序图标。在本主题中,“可以作为应用程序的.png图标”指出这些PNG图像被设计为应用的图形用户界面(GUI)中的...
用户只需将KTX文件拖放到程序界面,即可快速得到对应的PNG文件,大大提高了工作效率。 5. **操作步骤** 使用ktxToPng工具进行转换的步骤如下: - 下载并解压“ktxToPng.rar”压缩包。 - 运行解压后的“ktxToPng...
在Windows系统上,直接打开IPA文件是无法查看其中的资源,尤其是PNG图片,因为这些图片通常经过了iOS特有的编码处理,仅能在Safari浏览器或iOS设备上正确显示。 要解决这个问题,我们需要使用Java编程语言来实现PNG...
本压缩包“微信小程序开发常用的1700个PNG小图标.zip”包含了大量用于微信小程序开发的图标资源,同时也适用于其他移动应用和网页开发。 这些PNG小图标是开发过程中必不可少的设计元素,它们用于表示各种功能、状态...
1. **识别文件格式**:首先,程序会检查文件的前8字节是否符合PNG签名,以确认文件是否为有效的PNG图像。 2. **读取IHDR块**:然后,程序读取IHDR块,获取图像的基本属性,如宽度、高度、颜色类型(灰度、RGB、索引...
在程序开发中,PNG图标图片因其高质量、小巧的文件大小以及支持透明度等特点,被广泛应用于网页、软件界面、移动应用等场景。 这个名为“PNG图标图片.rar”的压缩包显然包含了各种不同规格的PNG图标资源。这些图标...