Android图片处理

来源:互联网 发布:c语言int占几个字节 编辑:程序博客网 时间:2024/04/29 10:10

图片处理

最近学习了一下图片处理,在这里记录一下。如果有需要的朋友也可以去下载。

截图效果:

这里写图片描述

底片效果

算法 r = 255 - r, g = 255 - g, b = 255 - b

 public static Bitmap getImagFromNegative(Bitmap mBitmap){        //像素        int color;        //RGBA 代表红、绿、蓝、透明度        int r, g, b, a;        //生成一个bitmap        Bitmap negativeBitmap = Bitmap.createBitmap(mBitmap.getWidth(),mBitmap.getHeight(), Bitmap.Config.ARGB_8888);        //原图像素集合        int oldPixel[] = new int[mBitmap.getWidth() * mBitmap.getHeight()];        //新的像素集合        int newPixel[] = new int[mBitmap.getWidth() * mBitmap.getHeight()];        /**         * 参数         * pixels  接收位图颜色值的数组         * offset  写入到pixels[]中的第一个像素索引值         * stride  pixels[]中的行间距个数值(必须大于等于位图宽度)。可以为负数         * x      从位图中读取的第一个像素的x坐标值。         * y      从位图中读取的第一个像素的y坐标值         * width  从每一行中读取的像素宽度         * height 读取的行数         */        mBitmap.getPixels(oldPixel,0,mBitmap.getWidth(),0,0,mBitmap.getWidth(),mBitmap.getHeight());        //循环获取图片的像素        for(int i = 0; i < oldPixel.length; i ++){            //每个像素            color = oldPixel[i];            r = Color.red(color);            g = Color.green(color);            b = Color.blue(color);            a = Color.alpha(color);            //计算新的RGBA            r = 255 - r;            g = 255 - g;            b = 255 - b;            r = processColorValue(r);            g = processColorValue(g);            b = processColorValue(b);            //生成新的像素值            color = Color.argb(a, r, g, b);            newPixel[i] = color;        }        //将新生成的像素赋值给新的图片        negativeBitmap.setPixels(newPixel,0,mBitmap.getWidth(),0,0,mBitmap.getWidth(),mBitmap.getHeight());        //返回处理后的图片        return negativeBitmap;    }

复古效果

算法 r = (int)(0.393 * r + 0.769 * g + 0.189 * b);g = (int)(0.349 * r + 0.686 * g + 0.168 * b);b = (int)(0.272 * r + 0.534 * g + 0.131 * b);

    public static Bitmap getImagFromRetro(Bitmap mBitmap){        //像素        int color;        //RGBA 代表红、绿、蓝、透明度        int r, g, b, a;        //生成一个bitmap        Bitmap redroBitmap = Bitmap.createBitmap(mBitmap.getWidth(),mBitmap.getHeight(), Bitmap.Config.ARGB_8888);        //原图像素集合        int oldPixel[] = new int[mBitmap.getWidth() * mBitmap.getHeight()];        //新的像素集合        int newPixel[] = new int[mBitmap.getWidth() * mBitmap.getHeight()];        //获取图片的像素        mBitmap.getPixels(oldPixel,0,mBitmap.getWidth(),0,0,mBitmap.getWidth(),mBitmap.getHeight());        //循环获取图片的像素        for(int i = 0; i < oldPixel.length; i ++){            //每个像素            color = oldPixel[i];            r = Color.red(color);            g = Color.green(color);            b = Color.blue(color);            a = Color.alpha(color);            //计算新的RGBA            r = (int)(0.393 * r + 0.769 * g + 0.189 * b);            g = (int)(0.349 * r + 0.686 * g + 0.168 * b);            b = (int)(0.272 * r + 0.534 * g + 0.131 * b);            r = processColorValue(r);            g = processColorValue(g);            b = processColorValue(b);            //生成新的像素值            color = Color.argb(a, r, g, b);            newPixel[i] = color;        }        //将新生成的像素赋值给新的图片        redroBitmap.setPixels(newPixel,0,mBitmap.getWidth(),0,0,mBitmap.getWidth(),mBitmap.getHeight());        //返回处理后的图片        return redroBitmap;    }

浮雕效果

算法 r = (int)(nr - r + 128);g = (int)(ng - g + 128);b = (int)(nb - b + 128);

public static Bitmap getImagFromRelief(Bitmap mBitmap){        //像素        int color;        //下一个像素        int nextColor;        //RGBA 代表红、绿、蓝、透明度        int r, g, b, a;        //下一个RGB        int nr, ng, nb;        //平均值        int agv;        //生成一个bitmap        Bitmap reliefBitmap = Bitmap.createBitmap(mBitmap.getWidth(),mBitmap.getHeight(), Bitmap.Config.ARGB_8888);        //原图像素集合        int oldPixel[] = new int[mBitmap.getWidth() * mBitmap.getHeight()];        //新的像素集合        int newPixel[] = new int[mBitmap.getWidth() * mBitmap.getHeight()];        //获取图片的像素        mBitmap.getPixels(oldPixel,0,mBitmap.getWidth(),0,0,mBitmap.getWidth(),mBitmap.getHeight());        //循环获取图片的像素        for(int i = 1; i < oldPixel.length; i ++){            //下一个像素            nextColor = oldPixel[i];            //每个像素            color = oldPixel[i - 1];            r = Color.red(color);            g = Color.green(color);            b = Color.blue(color);            a = Color.alpha(color);            nr = Color.red(nextColor);            ng = Color.green(nextColor);            nb = Color.blue(nextColor);            //计算新的RGBA            r = (int)(nr - r + 128);            g = (int)(ng - g + 128);            b = (int)(nb - b + 128);            r = processColorValue(r);            g = processColorValue(g);            b = processColorValue(b);            //生成新的像素值            color = Color.argb(a, r, g, b);            newPixel[i] = color;        }        //将新生成的像素赋值给新的图片        reliefBitmap.setPixels(newPixel,0,mBitmap.getWidth(),0,0,mBitmap.getWidth(),mBitmap.getHeight());        //返回处理后的图片        return reliefBitmap;    }

还有模糊、复古等效果。

我将图片处理的类写成了一个公共类,如有更多的效果可以直接往公共类中添加即可。大家相互学习一下。

源码下载

0 0