现在有这么一个需求,我知道该图片的宽度,高度,色深数值。 有一段很长的全16进制的字符串,比如F0F0F0F0F0F0555555这样的东西。 这个16进制字符串就是该图片里面的颜色。。 我想根据这些东西生成一个bmp图片,我应该怎么做才好呢?

解决方案 »

  1.   

        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"));
      

  2.   


    谢大大.. 还有我有些疑问。。charPerPixel 这个是色深的数值么?  我看大大生成的是24位的图片,这个24跟6之间是什么样的关系呢?
    还有我假如是32位的会是多少呢?
      

  3.   

    是指每个像素,你用多少个16进制的字符表示
    F0F0F0 --> 6
      

  4.   

    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" 即可
      

  5.   

    原来是这样. 了解色深之间的关系了。  32位的带alpha通道的bmp图, 我在网上搜的一篇文章。 但是那是关于vb的,
    http://tieba.baidu.com/p/1282375108  
    我正在用的数据,对方也告诉我这是bmp图的数据.  不知道我输出成png格式的话里面颜色会不会丢失呢