2011-02-08 33 views
1

私は、次のJavaコードを持っている:JavaでBufferedImageを高速で初期化する方法は?

public static BufferedImage createImage(byte[] data, int width, int height) 
{ 
    BufferedImage res = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY); 

    byte[] rdata = ((DataBufferByte)res.getRaster().getDataBuffer()).getData(); 

    for (int y = 0; y < height; y++) { 
    int yi = y * width; 
    for (int x = 0; x < width; x++) { 
     rdata[yi] = data[yi]; 
     yi++; 
    } 
    } 

    return res; 
} 

これを行うにはより高速な方法はありますか?

C++ではmemcpyを使用しますが、Javaでは使用しますか?

また、渡されたデータで結果イメージを直接初期化することはできますか?

+0

どのくらい速くする必要がありますか? – leonm

+0

正確な数字はありません。私はこの方法が遅いことが新しく、コードをより速く/より良くしたいと考えています。 –

答えて

6

さて、あなたはSystem.arraycopyを使用することができますすぐに配列をコピーするには:私は、私は怖いで開始するBufferedImageを初期化することは知らない

System.arraycopy(data, 0, rdata, 0, height * width); 

あなたが試してみました:

res.getRaster().setDataElements(0, 0, width, height, data); 

を?

+0

私はあなたのソリューションの両方を試してみました。 ありがとう! –

関連する問題