下面代码完成了将彩色图片转化为灰度图,
Elements和Common是两个工具类
public class TestPro {
public static void main(String[] args) throws IOException {
BufferedImage bi = (BufferedImage)ImageIO.read(new File("A://图片/小清新1.jpg"));
int iw=bi.getWidth(null);
int ih=bi.getHeight(null);
Common common=new Common();
Elements elements=new Elements();
int[] pixels= common.grabber(bi, iw, ih);
//转变为灰度图像
pixels = elements.toGray(pixels, iw, ih);
//将数组中的象素产生一个图像
/*for(int i=0;i<pixels.length;i++)
{
System.out.println(pixels[i]+" ");
}*/
//showPix(graph, pixels, "转变结果");
ImageProducer ip=new MemoryImageSource(iw, ih, pixels, 0, iw);
Component component=new Component(){};
Image sImage=component.createImage(ip);//通过ImageProducer对象生成Image对象
boolean a=ImageIO.write(toBufferedImage(sImage), "jpg",new File("A://图片/test.jpg"));
System.out.println(a);
}
//将Image对象转化为BufferedImage对象
public static BufferedImage toBufferedImage(Image image) {
if (image instanceof BufferedImage) {
return (BufferedImage)image;
}
// This code ensures that all the pixels in the image are loaded
image = new ImageIcon(image).getImage();
// Determine if the image has transparent pixels; for this method's
// implementation, see e661 Determining If an Image Has Transparent Pixels
//boolean hasAlpha = hasAlpha(image);
// Create a buffered image with a format that's compatible with the screen
BufferedImage bimage = null;
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
try {
// Determine the type of transparency of the new buffered image
int transparency = Transparency.OPAQUE;
/* if (hasAlpha) {
transparency = Transparency.BITMASK;
}*/
// Create the buffered image
GraphicsDevice gs = ge.getDefaultScreenDevice();
GraphicsConfiguration gc = gs.getDefaultConfiguration();
bimage = gc.createCompatibleImage(
image.getWidth(null), image.getHeight(null), transparency);
} catch (HeadlessException e) {
// The system does not have a screen
}
if (bimage == null) {
// Create a buffered image using the default color model
int type = BufferedImage.TYPE_INT_RGB;
//int type = BufferedImage.TYPE_3BYTE_BGR;//by wang
/*if (hasAlpha) {
type = BufferedImage.TYPE_INT_ARGB;
}*/
bimage = new BufferedImage(image.getWidth(null), image.getHeight(null), type);
}
// Copy image to buffered image
Graphics g = bimage.createGraphics();
// Paint the image onto the buffered image
g.drawImage(image, 0, 0, null);
g.dispose();
return bimage;
}
}