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
- android图片处理一
- android 图片放大处理
- android 处理图片资源
- Android处理图片
- android图片处理技巧
- android处理图片
- Android图片处理技巧
- Android图片处理技巧
- android图片处理方法
- android 图片处理
- Android 图片处理特效
- android 图片处理
- android 图片处理
- android 图片处理
- android图片处理方法
- android图片处理
- android 处理图片工具
- Android图片处理
- 双向多对一映射关系
- Java学习三之第一个代码HelloWord的输出
- 非常详细的 Docker 学习笔记
- lua堆栈
- C++程序的一般结构
- Android图片处理
- 分区表主键
- java 中String编码和byte 解码 总结
- webpack2 引入sass 解决方案
- div间距
- [SteamOS]虚拟机安装steamOS 1
- 访问权限控制
- Maven 主程序 和 依赖jar
- SQL Server模糊查询,日期查询