📄 getpicfromrec.java
字号:
//png格式//0x89 0x50//0x60 0x82//MID 格式//0x4D 0x54//0x2F 0x00//gif 格式// 0x47 0x49 0x00 0x3B// 0x00 0x3Bimport java.io.*;class GetPicFromRec { public GetPicFromRec(){} public static final void main(String args[]){ System.out.println("*****************************************************"); System.out.println("* *"); System.out.println("* *"); System.out.println("* ---daibou007--- *"); System.out.println("* ---2007.6.25--- *"); System.out.println("* ---http://daibou007.blog.163.com/--- *"); System.out.println("* *"); System.out.println("*****************************************************"); System.out.println(""); System.out.println(""); System.out.println(""); GetPicFromRec thisClass = new GetPicFromRec(); System.out.println("-------------开始读取文件---------------"); System.out.println(""); System.out.println(""); System.out.println(""); byte[] tempArray = new byte[102400];// tempArray = thisClass.getTheByteFromRec("bom"); if(args[0]!= null){ thisClass.ResString = args[0]; tempArray = thisClass.getTheByteFromRec(args[0]); } else{ System.out.println("-------------文件名错误或文件不存在---------------"); System.exit(0); } System.out.println("-------------开始导出PNG图片---------------"); System.out.println(""); System.out.println(""); thisClass.picNumber = 0; thisClass.setStartAndEnd(tempArray,0); thisClass.writePic(tempArray,0); if(thisClass.picNumber!= 0){ System.out.println("PNG图片个数:" + thisClass.picNumber); }else{ System.out.println("没有PNG图片"); } System.out.println(""); System.out.println(""); System.out.println("-------------导出PNG图片完毕---------------"); System.out.println("-------------开始导出MID音乐---------------"); System.out.println(""); System.out.println(""); thisClass.setStartAndEnd(tempArray,1); thisClass.writePic(tempArray,1); if(thisClass.picNumber!= 0){ System.out.println("MID音乐个数:" + thisClass.picNumber); }else{ System.out.println("没有MID音乐"); } System.out.println(""); System.out.println(""); System.out.println("-------------导出MID音乐完毕---------------"); System.out.println("-------------开始导出WAV音乐---------------"); System.out.println(""); System.out.println(""); thisClass.getWavStartAndLength(tempArray); thisClass.writePic(tempArray,2); if(thisClass.picNumber!= 0){ System.out.println("WAV音乐个数:" + thisClass.picNumber); }else{ System.out.println("没有WAV音乐"); } System.out.println(""); System.out.println(""); System.out.println("-------------导出WAV音乐完毕---------------"); System.out.println(""); System.out.println("-------------退出程序---------------"); System.exit(0); } public byte[] getTheByteFromRec(String stringOfFile){ InputStream in; int fileLenght; byte [] storeFileByByte = new byte [1024]; try{ in = new FileInputStream(stringOfFile); fileLenght = in.available(); System.out.println("fileLength:"+fileLenght); if(fileLenght > 0) storeFileByByte = new byte [fileLenght]; in.read(storeFileByByte); //close the in. if(in!=null)in.close(); }catch(Exception e){ System.out.println("文件不存在,或者文件名不正确!!!"); System.exit(0); } return storeFileByByte; } //存储起始和末位索引。 int start[]; int end[]; int picNumber;//图片个数 String ResString; byte formatSymbol[][]={ // png 2 2 {(byte)0x89, (byte)0x50,(byte)0x4E,(byte)0x42,(byte)0x60, (byte)0x82}, //mid 3 3 {(byte)0x4D, (byte)0x54,(byte)0x68,(byte)0xFF,(byte)0x2F, (byte)0x00}, //wav {(byte)0x52, (byte)0x49, (byte)0x46, (byte)0x46}, }; String fileName[] ={ ".png", ".mid", ".wav" };//int formatIndex 为那个格式索引。public void setStartAndEnd(byte[] picArray,int formatIndex){ switch(formatIndex){ case 0: //png for(int i = 0; i< picArray.length - 2;i++){ if(picArray[i] == formatSymbol[formatIndex][0] && picArray[i + 1] == formatSymbol[formatIndex][1]&& picArray[i + 2] == formatSymbol[formatIndex][2] ){ picNumber++; } } System.out.println("png图片一个也没有:" + picNumber); if( picNumber!=0 ){ //存储开始点和结束点 start = new int[picNumber]; end = new int [picNumber]; int ArrayIndex = 0; for(int j = 0; j < picArray.length - 2 ; j++){ if(picArray[j] == formatSymbol[formatIndex][0] && picArray[j + 1] == formatSymbol[formatIndex][1] && picArray[j + 2] == formatSymbol[formatIndex][2]) {//开始 start[ArrayIndex] = j; ArrayIndex++; } if(picArray[j] == formatSymbol[formatIndex][3]&&picArray[j + 1] == formatSymbol[formatIndex][4]&& picArray[j + 2] == formatSymbol[formatIndex][5] ) {//结束 end[ArrayIndex - 1] = j + 2; } } } break; case 1://mid for(int i = 0; i< picArray.length - 2;i++){ if(picArray[i] == formatSymbol[formatIndex][0] && picArray[i + 1] == formatSymbol[formatIndex][1]&& picArray[i + 2] == formatSymbol[formatIndex][2] ){ picNumber++; } } System.out.println("mid音乐一个也没有:" + picNumber); if( picNumber!= 0 ){ //存储开始点和结束点 start = new int[picNumber]; end = new int [picNumber]; int ArrayIndex = 0; for(int j = 0; j < picArray.length - 2 ; j++){ if(picArray[j] == formatSymbol[formatIndex][0] && picArray[j + 1] == formatSymbol[formatIndex][1] && picArray[j + 2] == formatSymbol[formatIndex][2]) {//开始 start[ArrayIndex] = j; ArrayIndex++; } if(picArray[j] == formatSymbol[formatIndex][3]&&picArray[j + 1] == formatSymbol[formatIndex][4]&& picArray[j + 2] == formatSymbol[formatIndex][5] ) {//结束 end[ArrayIndex - 1] = j + 2; } } } break; }}//输出为图片文件public void writePic( byte[] arrayPic ,int formatIndex){ String [] fileNameArray = new String[picNumber]; for(int i = 0;i < picNumber;i++){ fileNameArray[i] = ResString + i + fileName[formatIndex]; System.out.println("导出的资源文件名:"+fileNameArray[i]); } File [] file = new File[fileNameArray.length]; for(int i = 0;i < fileNameArray.length;i++){ file[i] = new File(fileNameArray[i]); } try{ FileOutputStream fos ; for(int i = 0;i < file.length;i++){ fos = new FileOutputStream(file[i]); if(formatIndex == 2)//wav fos.write(arrayPic,WavArray[i],wavLength[i]); else//其他 fos.write(arrayPic,start[i],end[i] - start[i] + 1); fos.flush(); fos.close(); } }catch(Exception e){ } System.out.println("成功导出:" + picNumber + "资源!!");picNumber = 0;}//wav 格式// 4 字节 RIFF 4 字节 long 长度 int [] WavArray; int [] wavLength;public void getWavStartAndLength(byte[] picArray){ picNumber = 0; System.out.println("get the wav"); for(int i = 0; i< picArray.length - 3;i++){ if(picArray[i] == formatSymbol[2][0] && picArray[i + 1] == formatSymbol[2][1]&& picArray[i + 2] == formatSymbol[2][2]&& picArray[i + 3] == formatSymbol[2][3] ){ picNumber++; } } WavArray = new int[picNumber]; wavLength = new int[picNumber]; int ArrayIndex = 0; for(int i = 0; i< picArray.length - 3;i++){ if(picArray[i] == formatSymbol[2][0] && picArray[i + 1] == formatSymbol[2][1]&& picArray[i + 2] == formatSymbol[2][2]&& picArray[i + 3] == formatSymbol[2][3] ){ WavArray[ArrayIndex] = i; ArrayIndex++; } } System.out.println("起始坐标:"+ WavArray[0]); ArrayIndex = 0; for(int i = 0; i< picArray.length - 8;i++){ if(picArray[i] == formatSymbol[2][0] && picArray[i + 1] == formatSymbol[2][1]&& picArray[i + 2] == formatSymbol[2][2]&& picArray[i + 3] == formatSymbol[2][3] ){ byte tempArray[]={picArray[i + 7] , picArray[i+6] , picArray[i+5] , picArray[i+4] }; wavLength[ArrayIndex]= byteArray4ToInt(tempArray) + 8; System.out.println("实际单位文件长度:"+ picArray.length); System.out.println("计算单位文件长度:" + wavLength[ArrayIndex]); ArrayIndex++; } }} //*************************工具函数************************ // 取正 private int toInt(byte b){ if(b >= 0) return (int)b; else return (int)(b + 256); } private int byteArray4ToInt(byte[] byteValue){ if(byteValue.length != 4) return 0; int intValue = 0; try{ intValue = toInt(byteValue[0]); intValue = (intValue << 8) + toInt(byteValue[1]); intValue = (intValue << 8) + toInt(byteValue[2]); intValue = (intValue << 8) + toInt(byteValue[3]); } catch(Exception e){ e.printStackTrace(); } return intValue; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -