0

そのため、バイト配列から画像を作成しようとしましたが、ImageIO.read()メソッドが例外なくnullポインターを返す理由を理解できません。

@Override
public int setParam(byte[] buffer) {
    mFlag = buffer[0];  //TODO
    mX = Convertor.convert2BytesToInt(buffer[1], buffer[2]);
    mY = Convertor.convert2BytesToInt(buffer[3], buffer[4]);    
    mWidth = Convertor.convert2BytesToInt(buffer[5], buffer[6]);
    mHeight = Convertor.convert2BytesToInt(buffer[7], buffer[8]);
    mLength = Convertor.convert4BytesToInt(buffer[9], buffer[10], buffer[11], buffer[12]);

    byte[] bufferpix = Arrays.copyOfRange(buffer, 13, 13+mLength);
    ByteArrayInputStream in = new ByteArrayInputStream(bufferpix);
    try {
        mImage = ImageIO.read(in);
    } catch (IOException e) {
        e.printStackTrace();
    }
    return 13+mLength;
}

@Override
public void draw(Graphics2D g, ArrayList<Color> palette) {
    System.out.print("Draw Image\n");
    g.drawImage(mImage, mX, mY, mWidth, mHeight, null);
}

バッファは問題ないようです。データRGBAが含まれています(各1バイト、つまりピクセルあたり4バイト)。その使用法に問題がありますか?どうも

ところで、不思議に思うかもしれませんが、このバッファは以前にAndroidクラスのビットマップによって作成されています。

4

1 に答える 1

0

私は正しい方法を使用していませんでした:

    int[] bufferpix = new int[mLength];
    for(int i=0; i<mLength;i++){
        bufferpix[i] = buffer[i+13];
    }
    mImage = new BufferedImage(mWidth, mHeight, BufferedImage.TYPE_4BYTE_ABGR_PRE);
    mImage.getRaster().setPixels(0, 0, mWidth, mHeight, bufferpix);

これは私の画像を正しく塗りつぶします。setPixelsがパラメータにバイト配列を取得できないのは残念です。これにより変換が困難になります(バイト配列をint配列にコピーするためのより良い方法をまだ探していません。おそらく1つあります)。

于 2012-12-24T11:36:55.817 に答える