图像处理之LOMO特效

来源:互联网 发布:simulink转换成c语言 编辑:程序博客网 时间:2024/05/16 05:07

一说到LOMO特效,大家还是很熟悉的,先不废话,先把实现效果贴上再说。

原图:


lomo效果


按照我的理解,简单来说就是在原图上加了一个圆形的alpha遮罩。中间的透明度较高,周围的透明度较低,颜色较暗,形成了特殊的视觉效果。

下面直接贴代码啦。

package algorithm.lomo;import java.awt.image.BufferedImage;/** * 经典LOMO特效 * */public class ClassicalLomo{/** * lomo特效:作用于radius为半径的圆内 *  * @param image * @param radius * */public static BufferedImage getImage(BufferedImage image, int radius){int width = image.getWidth();int height = image.getHeight();// 新建一个与源图像大小相等的新图像BufferedImage outputImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);// 扫描每个像素点for (int y = 0; y < height; y++){for (int x = 0; x < width; x++){int distance = getDistance(y, x, height / 2, width / 2);// 在半径外的点直接设置为黑色if (distance > radius){outputImage.setRGB(x, y, getRGB(0, 0, 0));}// 依据点到图像中点的距离设置像素的颜色// 模拟一个渐变的alpha遮罩的效果else{int[] rgb = getSplitRGB(image.getRGB(x, y));float ratio = (float) (1 - distance * 1.0 / radius);int r = (int) (rgb[0] * ratio);int g = (int) (rgb[1] * ratio);int b = (int) (rgb[2] * ratio);outputImage.setRGB(x, y, ImgUtil.getRGB(r, g, b));}}}return outputImage;}/** * 将r,g,b分量转换成一个完整的rgb值 *  * @param r * @param g * @param b * */public static int getRGB(int r, int g, int b){r = r << 16;g = g << 8;return (r | g | b);}/** * 将rgb保存在数组中 *  * @param rgb * */public static int[] getSplitRGB(int rgb){int[] rgbs = new int[3];rgbs[0] = (rgb & 0xff0000) >> 16;rgbs[1] = (rgb & 0xff00) >> 8;rgbs[2] = (rgb & 0xff);return rgbs;}/** * 获取两点之间的距离 *  * @param x1 *            第一个点的X坐标 * @param y1 *            第一个点的y坐标 * @param x2 *            第二个点的X坐标 * @param y2 *            第二个点的y坐标 * */public static int getDistance(int x1, int y1, int x2, int y2){int x = x1 - x2;int y = y1 - y2;return (int) Math.sqrt(x * x + y * y);}}



0 0
原创粉丝点击