2010-02-07 167 views
3

我用Java保存灰色图像仍然存在问题。我怎么能这样做? 格式不是那么重要,但应该没有图像压缩。灰度图像

有谁知道吗?

回答

3

这可能不是最优雅的方法,但它的工作:

import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 

import javax.imageio.ImageIO; 


public class ImageTest { 


    public static void main(String[] args) throws IOException { 

     int width = 10 // width of your image 
     int height = 10 // height of your image 

     BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 


     for (int x = 0; x < width; ++x) 
     { 
      for (int y = 0; y < height; ++y) 
      { 
       int grayscale = ... // get your greyscale value 0..255 from your array here. 
       int colorValue = grayscale | grayscale << 8 | grayscale << 16; 
       img.setRGB(x, y, colorValue); 
      } 

     } 

     ImageIO.write(img, "png", new File("output.png")); 
    } 

} 

的colorValue由R,G,和B(B上的最低字节,克一个在此之前的,和r之前的一个)。由于您的图像灰度,你可以简单地使用你的图像相同的R,G和B值,所以这就是为什么你可以简单地做:

int colorValue = grayscale | grayscale << 8 | grayscale << 16; 
+1

对于此类RGB操纵下面的符号是更为常见(我认为这很容易理解'底层'的情况):grey << 16 |灰色<< 8 |灰色 – SyntaxT3rr0r 2010-02-07 10:43:12

+0

正确,好点,这更容易理解。我调整了我的例子。 – amarillion 2010-02-07 13:26:03

+0

只是一个注释,如果你想要Alpha通道,你应该使用TYPE_INT_ARGB,并且将aloha字节的值转换为<< 24。 (我认为这可能是有用的,因为你是节省PNG) – medopal 2010-02-07 14:52:05