2011-12-08 6 views
1

16ビットPNGを作成しようとしていますが、傾けることはできません。また、255,255,255/r、g、bとして定義された8ビットカラーを16ビットカラーに変換する方法はありますか?Javaで16ビットのグレースケールイメージを作成するには

BufferedImage bi = new BufferedImage(256, 256, 
      BufferedImage.TYPE_USHORT_GRAY); 

    // 65536 
    for (int i = 0; i < 256; i++) 
     for (int j = 0; j < 256; j++) { 
      int mask = 0xf0 
      int value = 255 & mask; // zero other bits 
      value >>= 16; 
      bi.setRGB(i, j, value); 
      // bi.setRGB(i, j, 65536); 
     } 

    File f = new File("gray.png"); 

    try { 
     ImageIO.write(bi, "png", f); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

答えて

1

value >>= 16はゼロに設定されています。

24ビットRGBから16ビットカラーに変換する場合、通常はRGB565とRGB555の2通りがあります。数字は各カラーコンポーネントに与えられるビットの数を示します。

0

この問題の解決策ではありませんが、要件を達成する別の方法です。

BufferedImage bi = new BufferedImage(256, 256, BufferedImage.TYPE_USHORT_GRAY); 

Graphics2D g = bi.createGraphics(); 
g.setColor(Color.GRAY); 

g.fillRect(0,0,256,256); 
File f = new File("C:/gray.png"); 

try { 
    ImageIO.write(bi, "png", f); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
+0

私のコンピュータではありませんが、それは8または16ビットPNGを作成するかどうか教えてください?ありがとう! – user1088777

+0

@ user1088777私は分かりません。 [Here](http://stackoverflow.com/q/4116858/862441)は、役に立つかもしれない関連する質問です。 – srkavin

関連する問題