您的位置:首页 > 其它

图像处理--获取灰度图和黑白图

2017-03-31 18:23 405 查看
转载自:http://blog.csdn.net/luoweifu/article/details/8042494,谢谢作者的分享,我摘抄了代码部分作为笔记

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

import javax.imageio.ImageIO;

public class HandlerImage {

public static void main(String[] args) {
// TODO Auto-generated method stub

File srcFile = new File("D:/timg.jpg");

File desFile = new File("D:/des.jpg");

try {
BufferedImage bufferedImage = ImageIO.read(srcFile);

int width = bufferedImage.getWidth();
int height = bufferedImage.getHeight();

int startX = 0;
int startY = 0;
int offset = 0;
int scansize = width;

int[] rgbArray = bufferedImage.getRGB(startX, startY, width, height, null, offset, scansize);
int[] resultArray = new int[rgbArray.length];//保存处理后的图像数据

Color c;
int gray;

for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {

c = new Color(rgbArray[i * width + j]);

/*--------获取黑白图----------*/
gray = (int) (0.299 * c.getRed() + 0.578 * c.getGreen() + 0.114 * c.getBlue());
resultArray[i * width + j] = new Color(gray, gray, gray).getRGB();
/*----------------------------*/

/*--------获取R,G,B三种灰度图----------*/
//resultArray[i * width + j] = new Color(c.getRed(), 0, 0).getRGB();
//resultArray[i * width + j] = new Color(0, c.getGreen(), 0).getRGB();
//resultArray[i * width + j] = new Color(0, 0, c.getBlue()).getRGB();
/*-------------------------------------*/

}
}

FileOutputStream fileOutputStream = new FileOutputStream(desFile);

BufferedImage imgOut = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);
imgOut.setRGB(startX, startY, width, height, resultArray, offset, scansize);
ImageIO.write(imgOut, "jpg", fileOutputStream);
fileOutputStream.flush();
fileOutputStream.close();

int imgType = bufferedImage.getType();
switch (imgType) {
case BufferedImage.TYPE_3BYTE_BGR:
System.out.println("-- TYPE_3BYTE_BGR --");

break;
case BufferedImage.TYPE_4BYTE_ABGR:
System.out.println("-- TYPE_4BYTE_ABGR --");

break;
case BufferedImage.TYPE_4BYTE_ABGR_PRE:
System.out.println("-- TYPE_4BYTE_ABGR_PRE --");

break;
case BufferedImage.TYPE_BYTE_BINARY:
System.out.println("-- TYPE_BYTE_BINARY --");

break;
case BufferedImage.TYPE_BYTE_GRAY:
System.out.println("-- TYPE_BYTE_GRAY --");

break;
case BufferedImage.TYPE_BYTE_INDEXED:
System.out.println("-- TYPE_BYTE_INDEXED --");

break;
case BufferedImage.TYPE_CUSTOM:
System.out.println("-- TYPE_CUSTOM --");

break;
case BufferedImage.TYPE_INT_ARGB:
System.out.println("-- TYPE_INT_ARGB --");

break;
case BufferedImage.TYPE_INT_ARGB_PRE:
System.out.println("-- TYPE_INT_ARGB_PRE --");

break;
case BufferedImage.TYPE_INT_BGR:
System.out.println("-- TYPE_INT_BGR --");
break;

case BufferedImage.TYPE_INT_RGB:
System.out.println("-- TYPE_INT_RGB --");

break;
case BufferedImage.TYPE_USHORT_555_RGB:
System.out.println("-- TYPE_USHORT_555_RGB --");

break;
case BufferedImage.TYPE_USHORT_565_RGB:
System.out.println("-- TYPE_USHORT_565_RGB --");

break;
case BufferedImage.TYPE_USHORT_GRAY:
System.out.println("-- TYPE_USHORT_GRAY --");

break;
default:
break;
}

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息