已知图像的数据部分,为一数组,现在想把这个数据保存为256色位图,请问该怎么样实现!我在网上搜索了一下,就是一篇文章大家翻来覆去的抄,还是24位的位图保存,而且是将一副图片保存,和我的初衷不一样。请大侠们指点,谢谢!

解决方案 »

  1.   

    int width = 300;
        int height = 200;
        int numBands = 3;
        
    // 存放图像数据的数组
        byte[] byteArray = new byte[width * height * numBands];
        int j = 0;
        for (int i = 0; i < width * height * numBands; i++) {
          if (j == 0) {
            byteArray[i] = (byte) 255;
            j++;
          }
          else if (j == 1) {
            byteArray[i] = (byte) 0;
            j++;
          }
          else if (j == 2) {
            byteArray[i] = (byte) 0;
            j = 0;
          }
        }    DataBuffer dataBuffer = new DataBufferByte(byteArray, numBands);
        int[] bandOffsets = new int[] {
            0, 1, 2};
        SampleModel sampleModel = new PixelInterleavedSampleModel(
            DataBuffer.TYPE_BYTE, width, height, 3, width * 3, bandOffsets);    WritableRaster wr = Raster.createWritableRaster(
            sampleModel, dataBuffer, new Point(0, 0));    // ColorModel
        ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_sRGB);
        ComponentColorModel cm = new ComponentColorModel(
            cs, false, false, Transparency.OPAQUE, DataBuffer.TYPE_BYTE);    BufferedImage bufferedImage = new BufferedImage(cm, wr, false, null);
        
        try{
         ImageIO.write(bufferedImage,"bmp",new File("test.bmp"));
        }catch(Exception ex){
         ex.printStackTrace();
        }
      

  2.   

    to:chenweionline(键盘上的舞者) 
    这个不是256色的吧,256色的好像数据部分是在调色板中的索引值啊!
      

  3.   

    是否在编码成bmp格式时,编码库会创建调色板和索引?
    这个我不太了解,你可以具体研究一下,如果有什么认识还请继续跟帖告知。
      

  4.   

    看了网上的那篇24位位图保存的文章,觉得楼主可以借鉴一下。
    24位位图是没有调色板的,其数据部分就是rgb值,而256色的数据部分的值是在调色板中的索引值,这点楼主已知道就不用说了,将那篇文章写数据部分给修改一下,就成!先写位图文件头,第二步写信息头,第三步,写调色板:这一步具体如下:
    byte []rgb = new byte[4];//看调色板的定义,4个字节
    for(int i=0; i<256; i++)
    {rgb[0]=(byte)i;//blue
     rgb[1]=(byte)i;//green
     rgb[2]=(byte)i;//red
     rgb[3]=0;//reserved,be 0
     fo.write(rgb);
    }
    第四步:写数据部分,数据部分的值应在0到255之间,因为其为索引值嘛。楼主既然说数据部分已知,想来是没问题的了。
    大概就是这样,有问题请大家指出了。呵呵!