Android Camera 实时滤镜(四)

基于Android平台PS特效的自定义算法的实现

Created with Rapha?l 2.1.2开始图像Bitmap获取像素getPixelsPS算法 修改像素点Color.red/green/blue滤镜图像结束



在ARGB颜色空间,分别使用A(Transparency)、R(Red)、G(Green)、B(Blue)四个值来描述一个像素点,那么对于一个宽w高h的图片来说,共有w*h个像素点,可以用一个数组对象int [] pixels来表示相应的图片,pixels = { p1,p2,p3…}。在把各个像素点都用ARGB来表示,那么这张图片就可以用一个[w*h,4]的矩阵来描述:

pixels = {
         pa1,pr1,pg1,pb1,
         pa2,pr2,pg2,pb2,
         pa3,pr3,pg3,pb3,
         ……
}

android平台在获取像素方面提供了 Bitmap.getPixels 方法,我需要做的是遍历图像的像素点,对每一个像素点进行计算。然后将计算完的像素点通过Color.red/green/blue 方法处理后,将像素点填回Bitmap,从而得到滤镜后的图像。这种方式比ColorMatrix 要灵活,可以满足PS特效的实现效果。

1、简单的反色滤镜实现

取出图片的像素点,然后用255减去每个像素点,那么得到的就是一张有反色效果的图片

算法如下:

/**
 * @author neil
 */
public class AntiColorFilter implements ImageFilterInterface {

    private ImageData image = null; // 图片信息类

    public AntiColorFilter(Bitmap bmp) {
        image = new ImageData(bmp);
    }

    public ImageData imageProcess() {
        int width = image.getWidth();
        int height = image.getHeight();
        int R, G, B, pixel;
        for (int y = 0; y < height; y++) {
            for (int x = 0; x < width; x++) {
                R = image.getRComponent(x, y); // 获取RGB三原色
                G = image.getGComponent(x, y);
                B = image.getBComponent(x, y);

                R = 255 - R;
                B = 255 - B;
                G = 255 - G;

                image.setPixelColor(x, y, R, G, B);
            } // x
        } // y
        return image;
    }
}

2、油画滤镜的实现

通过查资料了解到油画滤镜的算法是”用当前点四周一定范围内任意一点的颜色来替代当前点颜色,最常用的是随机的采用相邻点进行替代”

算法如下:

public ImageData imageProcess() {
        int width = image.getWidth();
        int height = image.getHeight();
        int R, G, B, pixel,xx = 0,yy = 0;
        for (int y = 0; y < height; y++) {
            for (int x = 0; x < width; x++) {
                int pos = getRandomInt(1, 10000) % Model;
                xx = (x + pos) < width ? (x + pos) : (x - pos) >= 0 ? (x - pos) : x;
                yy = (y + pos) < height ? (y + pos) : (y - pos) >= 0 ? (y - pos) : y;  

                R = image.getRComponent(xx, yy); // 获取RGB三原色
                G = image.getGComponent(xx, yy);
                B = image.getBComponent(xx, yy);

                image.setPixelColor(x, y, R, G, B);
            } // x
        } // y

        return image;
    }

    public static int getRandomInt(int a, int b) {
        int min = Math.min(a, b);
        int max = Math.max(a, b);
        return min + (int)(Math.random() * (max - min + 1));
    }  

3、冰冻滤镜的实现

冰冻滤镜的算法是将像素点颜色加深,每个象素都用RGB三原色来表示,(0,0,0)就是纯黑,而(255,255,255)就是纯白,因此将没个像素点的RGB指变小,颜色就会加深

int width = image.getWidth();
        int height = image.getHeight();
        int R, G, B, pixel;
        for (int y = 0; y < height; y++) {
            for (int x = 0; x < width; x++) {
                R = image.getRComponent(x, y); // 获取RGB三原色
                G = image.getGComponent(x, y);
                B = image.getBComponent(x, y);

                pixel = R - G - B;
                pixel = pixel * 3 / 2;
                if (pixel < 0)
                    pixel = -pixel;
                if (pixel > 255)
                    pixel = 255;
                R = pixel; 

                pixel = G - B - R;
                pixel = pixel * 3 / 2;
                if (pixel < 0)
                    pixel = -pixel;
                if (pixel > 255)
                    pixel = 255;
                G = pixel;

                pixel = B - R - G;
                pixel = pixel * 3 / 2;
                if (pixel < 0)
                    pixel = -pixel;
                if (pixel > 255)
                    pixel = 255;
                B = pixel;

                image.setPixelColor(x, y, R, G, B);
            } // x
        } // y
时间: 2024-11-08 04:41:19

Android Camera 实时滤镜(四)的相关文章

Android Camera 实时滤镜(八)

一.Android Camera可以做哪些? 1.功能 拍摄相片 视频录制 取景器(扫描类应用,如人脸识别,名片识别,条形码识别) 2.根据Camera API实现自己的拍照程序,共7步 Created with Rapha?l 2.1.21.初始化 SurfaceHolder2.相机实例 SurfaceCreated3.回调 SurfaceChanged4.清理 SurfaceDestroyed5.布局 SurfaceView6.按钮 添加拍照按钮 二.Camera Preview是什么? 摄

Android Camera 实时滤镜(三)

一.基于Android平台基本滤镜算法的实现 1.Android提供了改变图像数值的方法ColorMatrix,通过ColorMatrix方法可以实现基本滤镜,如黑白.灰色.泛黄等效果. 2.通过ColorMatrix改变图像数值,生成变换矩阵,利用矩阵相乘,来改变每个点的像素值. Matrix => r1 r2 r3 r4 r5 g1 g2 g3 g4 g5 b1 b2 b3 b4 b5 a1 a2 a3 a4 a5 变化以后 R'  =  R * r1  +  G * r2  +  B * 

Android Camera 实时滤镜(二)

一.Android平台滤镜 滤镜这个功能在目前的市场上应用很广泛,发展也非常快,总结起来,基本上有以下三种应用会包含滤镜功能,都各有所长. 二.相机滤镜介绍 1.相机360镜介绍 相机360的滤镜特效类别比较多,每一类别又分为不同的特效. 其最主要的特点是它具有实时拍照滤镜功能,且在关闭重新进入后可记忆之前选择的滤镜. 缺点是滤镜效果一般,而且选择滤镜的交互比较复杂,不好操作. 2.魔幻时刻相机滤镜介绍(静态滤镜) 魔幻时刻相机Magic Hour是一款从ios移植过来的优秀拍照软件. 从其滤镜

Android Camera 实时滤镜(一)

1.Android系统将内置滤镜功能 滤镜功能有二十余种不同效果,不逊色于极受欢迎的智能手机应用Instagram所产生的效果. 2.颜色矩阵 ColorMatrix android中可以通过颜色矩阵(ColorMatrix类)方面的操作颜色,颜色矩阵是一个5x4 的矩阵.可以用来方面的修改图片中RGBA各分量的值,颜色矩阵以一维数组的方式存储如下: [ a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t ] 他通过RGBA四个通

Android Camera 实时滤镜(五)

Android 静态滤镜的实现 一.回顾知识点 1.基本滤镜效果的实现(黑白滤镜) 用到的技术是ColorMatrix.通过改变RGBA的系数,从而改变图像的成像效果. Created with Rapha?l 2.1.2图像BitmapColorMateixRGB系数滤镜图像 2.PS滤镜效果的实现(反色效果.冰冻效果.油画效果) 用到的技术是通过遍历图像的像素点,设置图像的像素点的RGB三原色来实现PS效果. Created with Rapha?l 2.1.2图像Bitmap获取像素get

Android Camera 实时滤镜(七)

HSL色彩模式与RGB色彩模式转换代码实现 RGB色彩模式 HSL色彩模式 HSL色彩模式与RGB色彩模式转换算法 HSL与RGB转换 RGB类 public class ColorRGB { public int r; public int g; public int b; } HSL类 public class ColorHSL { public int h; public float s; public float l; } a) RGB→HSL的算法描述. 步骤1:把RGB值转成[0,1

Android Camera 实时滤镜(六)

HSL色彩模式 1.颜色HSL H: hue 色调 S: saturation 饱和度 L: lum 亮度 2.概述 HSL色彩模式是工业界的一种颜色标准,是通过对色调(H).饱和度(S).亮度(L)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,HSL即是代表色调,饱和度,亮度三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一. HSL色彩模式使用HSL模型为图像中每一个像素的HSL分量分配一个0~255范围内的强度值.HSL图像只使用三

Android Camera fw学习(四)-recording流程分析

Android Camera fw学习(四)-recording流程分析 备注:备注:本文是Android5.1学习笔记.博文按照软件启动流程分析.  且行且惜,一步一个脚印,这次学习camera Video.虽然标题是recording流程分析,但这里很多和preview是相似的(包含更新,创建Stream,创建Request),这里主要分析MediaRecorder对象创建.video帧监听对象注册.帧可用事件以及一系列callback流程分析. 一.认识video(mediaRecorde

Android平台Camera实时滤镜实现方法探讨(十)--代码地址以及简单介绍(20160118更新)

简单做了个相机和图片编辑模块,时间原因非常多功能还没有做.尚有BUG,见谅,将在以后抽时间改动 代码地址 PS:请点个Star^-^ ----------------------------------------------------------------------------------------------------------------- 简单介绍: 1.眼下包括Instagram中19个滤镜,比如amaro,branan,earlybird,freud,hefe,lomo,