android图像处理(3)底片效果
2024-08-27 06:24:31
这篇将讲到图片特效处理的底片效果。跟前面一样是对像素点进行处理,算法是通用的。
算法原理:将当前像素点的RGB值分别与255之差后的值作为当前点的RGB值。
例:
ABC
求B点的底片效果:
B.r = 255 - B.r;
B.g = 255 - B.g;
B.b = 255 - B.b;
效果图:
效果图 原图
代码:
- package com.color;
- import android.content.Context;
- import android.graphics.Bitmap;
- import android.graphics.BitmapFactory;
- import android.graphics.Canvas;
- import android.graphics.Color;
- import android.graphics.Paint;
- import android.util.AttributeSet;
- import android.widget.ImageView;
- public class ColorView extends ImageView {
- private Paint myPaint = null;
- private Bitmap bitmap = null;
- private int width,height;
- private int[] oldPixels;
- private int[] newPixels;
- private int color,color2;
- private int pixelsR,pixelsG,pixelsB,pixelsA,pixelsR2,pixelsG2,pixelsB2;
- public ColorView(Context context, AttributeSet attrs)
- {
- super(context, attrs);
- bitmap = BitmapFactory.decodeResource(context.getResources(),R.drawable.ww);
- width = bitmap.getWidth();
- height = bitmap.getHeight();
- oldPixels = new int[width*height];
- newPixels = new int[width*height];
- invalidate();
- }
- @Override
- protected void onDraw(Canvas canvas) {
- super.onDraw(canvas);
- //获取像素
- bitmap.getPixels(oldPixels, 0, width, 0, 0, width, height);
- for(int i = 1;i < height*width; i++){
- color = oldPixels[i];
- //获取RGB分量
- pixelsA = Color.alpha(color);
- pixelsR = Color.red(color);
- pixelsG = Color.green(color);
- pixelsB = Color.blue(color);
- //转换
- pixelsR = (255 - pixelsR);
- pixelsG = (255 - pixelsG);
- pixelsB = (255 - pixelsB);
- //均小于等于255大于等于0
- if(pixelsR > 255){
- pixelsR = 255;
- }
- else if(pixelsR < 0){
- pixelsR = 0;
- }
- if(pixelsG > 255){
- pixelsG = 255;
- }
- else if(pixelsG < 0){
- pixelsG = 0;
- }
- if(pixelsB > 255){
- pixelsB = 255;
- }
- else if(pixelsB < 0){
- pixelsB = 0;
- }
- //根据新的RGB生成新像素
- newPixels[i] = Color.argb(pixelsA, pixelsR, pixelsG, pixelsB);
- }
- //根据新像素生成新图片
- bitmap.setPixels(newPixels, 0, width, 0, 0, width, height);
- canvas.drawBitmap(bitmap,0,0,myPaint);
- }
- }
最新文章
- 1Z0-053 争议题目解析692
- copy-paste component
- C#分割字符串
- C#List的排序和简单去重总结
- 非常全面的java基础笔试题
- Application(全局对象,ViewState
- Hive 7、Hive 的内表、外表、分区(22)
- NewsDao
- SpringMVC中遇到页面跳转出现404错误的问题
- HDU - 3038 种类并查集
- 利用JDBC工具类 模拟用户登录!
- centos7.5升级openssh7.4到7.9
- [IDEA]IDEA设置注释模板
- Java——this关键字
- ReentrantLock(重入锁)的使用
- 电子产品使用感受之—我的iPad Pro坏了。。。
- 『转载』hadoop 1.X到2.X的变化
- English trip V1 - B 3. I&#39;d Like a Room,Please 请给我一间房? Teacher:Julia Key:
- 文件I/O(2)
- Explaining Delegates in C# - Part 3 (Events 2)
热门文章
- OpenGL之抗锯齿 以及 线宽的设置
- HDOJ 5411 CRB and Puzzle 矩阵高速幂
- MongoDB 基本使用
- vue25---vue2.0变化
- 79.express里面的app.configure作用
- 异常:error 0152: No Entity Framework provider found for the ADO.NET provider with invariant name &#39;System.Data.SqlClient&#39;
- Metro界面的真正意义
- [转]LNMP环境下的Web常见问题排查(精品)
- Android性能优化之提高ListView性能的技巧
- Your Ruby version is 2.2.3, but your Gemfile specified 2.2.2