日常生活当中,男性或者女性朋友都会使用手机的拍照功能,想在也推出了很多相机App,那么今天我们就来看看关于这个滤镜相机的制作方法吧!!!
1、我们先写一个paint方法——绘制一个容器
public void paint(Graphics g)
{
super.paint(g);
}
2、将我们即将要传入的图片放到二维数组里面
public int [][] getImgArray(String path)
{
//创建传输需要的File对象(文件或目录的抽象表示)
File file = new File(path);
BufferedImage bi = null;
//设定图像缓冲区BufferedImage
try {
bi = ImageIO.read(file);//ImageReader解码所提供的的File结果
//此处有IO异常 javax.imageio
} catch (IOException e) {
e.printStackTrace();
}
//BufferedImage对象左上角坐标都是(0,0)
int w = bi.getWidth();//返回BufferedImage的宽度
int h = bi.getHeight();//返回BufferedImage的高度
//创建二维数组存储BufferedImage的宽度和高度
int [][] image = new int[w][h];
//循环遍历
for (int i = 0; i < w ; i++) {
for (int j = 0; j < h ; j++) {
int rgb = bi.getRGB(i,j);
//返回默认 RGB 颜色模型 (TYPE_INT_ARGB) 和默认 sRGB 颜色空间中的整数像素。
image[i][j] = rgb;
//把获取的颜色像素赋给存储的二维数组
}
}
return image;
}
3、创建一个成员变量(用于存储图片的二维数组)
int [][] imgArray;
{
imgArray = getImgArray("D:\\dmtp\\20171011095832_49d23dd458b7446249d84fda3d4ea1c1_7.jpeg");//此处是需要处理的图片路径
System.out.println("输入完成");
//静态代码块在类加载的时候进行
}
4、编写滤镜的方法
public void filter(Graphics g)
{
BufferedImage bufferedImage = new BufferedImage(imgArray.length,imgArray[0].length,
BufferedImage.TYPE_INT_ARGB);//缓冲区域
//构造一个类型为预定义图像类型之一的BufferedImage。该图像的ColorSpace为默认的 sRGB 空间。
for (int i = 0; i <imgArray.length ; i++) {
for (int j = 0; j < imgArray[i].length; j++) {
int pix_num = imgArray[i][j];
//二位数组传给一个引用
int red = (pix_num >> 16) &0xff;//二进制位运算 255(10) - 0xff(16)
int green = (pix_num >> 8) &0xff;
int blue = (pix_num >> 0) &0xff;
int gray = (red + green +blue)/3;//??
int newred = red +30;
if(newred > 255)//边界判断
{
newred = 255;
}
int grayPix = 255 << 24 | newred << 16 | green << 8 | blue << 0;//形成新的像素值
// 0可不写
bufferedImage.setRGB(i,j,grayPix);
/*
x - 要设置的像素的 X 坐标
y - 要设置的像素的 Y 坐标
rgb - RGB 值
*/
}
}
g.drawImage(bufferedImage,10,30,null);
}
原图是这样的
处理过后的结果就是这样的
这边就是蓝色深了一点,绘制的图像
灰色滤镜
具体实现差别部分,也是其中的核心在于
int newgray = blue +30;//用于
if(newgray > 255)//边界判断
{
newgray = 255;
}
int grayPix = 255 << 24 | newgray << 16 | newgray << 8 | blue << 0;
由于本张图片中的绿色green和蓝色blue居多,所以我们在此对于这两部分颜色进行特殊处理
以上就是本期内容,我们下期再见!