当前位置:编程学习 > JAVA >>

java 16进制处理bmp图片

现在有这么一个需求,我知道该图片的宽度,高度,色深数值。 

有一段很长的全16进制的字符串,比如F0F0F0F0F0F0555555这样的东西。 这个16进制字符串就是该图片里面的颜色。。 

我想根据这些东西生成一个bmp图片,我应该怎么做才好呢? --------------------编程问答--------------------
    int width = 30;
    int height = 3;
    int charPerPixel = 6;

    String pixelStr = "F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555"
        + "F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555"
        + "F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555";

    if (pixelStr.length() % charPerPixel != 0
        || pixelStr.length() / charPerPixel != width * height) {
      throw new IllegalArgumentException("像素信息长度不正确!");
    }

    BufferedImage img = new BufferedImage(width, height,
        BufferedImage.TYPE_INT_RGB);
    int[] rgb = new int[width * height];

    char[] charArray = pixelStr.toCharArray();
    for (int pos = 0; pos < rgb.length; pos++) {
      int color = 0;
      for (int i = 0; i < charPerPixel; i++) {
        int c = charArray[pos * charPerPixel + i];
        if (c >= '0' && c <= '9') {
          c -= '0';
        } else if (c >= 'A' && c <= 'F') {
          c -= 'A';
          c += 10;
        } else if (c >= 'a' && c <= 'f') {
          c -= 'a';
          c += 10;
        } else {
          throw new IllegalArgumentException("不能识别的字符" + c);
        }
        color <<= 4;
        color |= c;
      }
      rgb[pos] = color;
    }
    img.setRGB(0, 0, width, height, rgb, 0, width);
    ImageIO.write(img, "bmp", new File("D:/test/test.bmp"));
--------------------编程问答--------------------
引用 1 楼 shine333 的回复:
Java code?12345678910111213141516171819202122232425262728293031323334353637383940    int width = 30;    int height = 3;    int charPerPixel = 6;     String pixelStr = "F0F0F0F0F0F0555555F……


谢大大.. 还有我有些疑问。。

charPerPixel 这个是色深的数值么?  我看大大生成的是24位的图片,这个24跟6之间是什么样的关系呢?
还有我假如是32位的会是多少呢? --------------------编程问答-------------------- 是指每个像素,你用多少个16进制的字符表示
F0F0F0 --> 6 --------------------编程问答-------------------- 24bit = 6个hex,1个hex=4bit(0:0000~F:1111)
32bit = 8个hex,但是据我所知这个不能生成bmp。

因为,最高(左面)的两个Hex(8bit)会被认为是alpha值,也就是透明度,而bmp不支持

如果32bit,
把前面的BufferedImage.TYPE_INT_RGB--->TYPE_INT_ARGB
后面的"bmp" --> "png" 即可 --------------------编程问答--------------------
引用 4 楼 shine333 的回复:
24bit = 6个hex,1个hex=4bit(0:0000~F:1111)
32bit = 8个hex,但是据我所知这个不能生成bmp。

因为,最高(左面)的两个Hex(8bit)会被认为是alpha值,也就是透明度,而bmp不支持

如果32bit,
把前面的BufferedImage.TYPE_INT_RGB--->TYPE_INT_ARGB
后面……

原来是这样. 了解色深之间的关系了。  

32位的带alpha通道的bmp图, 我在网上搜的一篇文章。 但是那是关于vb的,
http://tieba.baidu.com/p/1282375108  
我正在用的数据,对方也告诉我这是bmp图的数据.  

不知道我输出成png格式的话里面颜色会不会丢失呢 --------------------编程问答-------------------- 被坦克哥抢先了
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,