簡體   English   中英

Java的ImageIO.read()返回null

[英]Java's ImageIO.read() return nulls

因此,我嘗試從字節數組創建圖像,但是我無法弄清楚為什么ImageIO.read()方法返回空指針而沒有任何異常。

@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類Bitmap創建的。

我沒有使用正確的方法:

    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數組中,也許有一種方法)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM