在eclipse中将一个PNG图片转换成十六进制字节数组输出





PNG图像有自己特殊的格式,而这个格式可以通过十六进制字节流很清楚地看出。


有关PNG格式的讲解我是参考这位老师的:http://www.cnblogs.com/lidabo/p/3701197.html


将图片转为十六进制字节数组的代码是参考这位老师的:http://blog.csdn.net/evangel_z/article/details/7453402


为了能更直观地比较,我稍做了些改动。代码如下:

<span style="font-size:14px;">package png;

import java.io.FileInputStream;

/** 
 * 图片转成十六进制 
 */ 
public class PngBytes {
	
	public static void main(String[] args) throws Exception  {
		try {
			FileInputStream fis = new FileInputStream("image/1.png");  
            java.io.ByteArrayOutputStream bos = new java.io.ByteArrayOutputStream();  
            byte[] buff = new byte[1024];  
            int len = 0;    
            
            while ((len = fis.read(buff)) != -1)  
            {  
                bos.write(buff, 0, len);  
            }  
            
            // 得到图片的字节数组  
            byte[] result = bos.toByteArray();  
            System.out.println("图片的字节数组:\n" + byte2HexStr(result));  
            		
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();  
		}
	}
	
	/* 
     * 实现字节数组向十六进制的转换方法一 
     */  
    public static String byte2HexStr(byte[] b)  
    {  
    	System.out.print("b.length:"+b.length+"\n");
        String hs = "";  
        String stmp = "";  
        for (int n = 0; n < b.length; n++)  
        {         	
            stmp = (Integer.toHexString(b[n] & 0XFF));  
            if (stmp.length() == 1)  {
            	hs = hs + "0" + stmp;  
            }else{
            	hs = hs + stmp;  
            }   
            hs+=' ';
            if(n!=0 && (n+1)%16==0){
            	hs+='\n';
            }
        }  
        return hs.toUpperCase();  
    }   
}
</span>


之前新建了一个8*8的PNG图像用来测试,其在Ultra Edit中打开的效果如下:



java项目的控制台效果如下:

  1. b.length:2799
  2. 图片的字节数组:
  3. 89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52 
  4. 00 00 00 08 00 00 00 08 08 06 00 00 00 C4 0F BE 
  5. 8B 00 00 00 09 70 48 59 73 00 00 0E C3 00 00 0E 
  6. C3 01 C7 6F A8 64 00 00 0A 4D 69 43 43 50 50 68 
  7. 6F 74 6F 73 68 6F 70 20 49 43 43 20 70 72 6F 66 
  8. 69 6C 65 00 00 78 DA 9D 53 77 58 93 F7 16 3E DF 
  9. F7 65 0F 56 42 D8 F0 B1 97 6C 81 00 22 23 AC 08 
  10. C8 10 59 A2 10 92 00 61 84 10 12 40 C5 85 88 0A 
  11. 56 14 15 11 9C 48 55 C4 82 D5 0A 48 9D 88 E2 A0 
  12. 28 B8 67 41 8A 88 5A 8B 55 5C 38 EE 1F DC A7 B5 
  13. 7D 7A EF ED ED FB D7 FB BC E7 9C E7 FC CE 79 CF 
  14. 0F 80 11 12 26 91 E6 A2 6A 00 39 52 85 3C 3A D8 
  15. 1F 8F 4F 48 C4 C9 BD 80 02 15 48 E0 04 20 10 E6 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值