博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android -- 图像处理(信息量超大)
阅读量:6414 次
发布时间:2019-06-23

本文共 3390 字,大约阅读时间需要 11 分钟。

Android的图像处理提供的API很帮,但是不适合用来写游戏,写游戏还是用专门的引擎比较好。

Android的图像处理还有3D的处理的API,感觉超屌。

我先分享一下Android的一般的处理,比如平移、翻转等:

缩放、旋转、平移、镜面、倒影                                                      

  • 缩放
Bitmap bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);img_one.setImageBitmap(bitmap1);        Bitmap alterBitmap = Bitmap.createBitmap(bitmap1.getWidth(),bitmap1.getHeight(),bitmap1.getConfig());Canvas canvas = new Canvas(alterBitmap);Paint paint = new Paint();paint.setColor(Color.BLACK);Matrix matrix = new Matrix();matrix.setValues(new float[]{        0.5f, 0, 0,        0, 1, 0,        0, 0, 1});//matrix.setScale(2.0f, 1);canvas.drawBitmap(bitmap1, matrix, paint);img_two.setImageBitmap(alterBitmap);
  • 旋转
Matrix matrix = new Matrix();//matrix.setRotate(180,bitmap1.getWidth()/2,bitmap1.getHeight()/2);matrix.setRotate(15);//消除锯齿paint.setAntiAlias(true);
  • 平移
Matrix matrix = new Matrix();//这个是当drawBitmap()的时候才发生变化//matrix.setTranslate(10, 10);//执行这句话就发生平移matrix.postTranslate(10, 10);
  • 镜子
Matrix matrix = new Matrix();//这个图片要选择左右不对称的效果才明显matrix.setScale(-1, 1);matrix.postTranslate(bitmap1.getWidth(), 0);
  • 倒影
Matrix matrix = new Matrix();matrix.setScale(1, -1);matrix.postTranslate(0, bitmap1.getHeight());

合成                                                                                           

方法主要就是把两张图分别画在Canvas上,Android的提供了API去设置这两张图片的合成形式:

iv = (ImageView) findViewById(R.id.iv);        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.appstore);        Bitmap alterBitmap = Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight(),bitmap.getConfig());                Canvas canvas = new Canvas(alterBitmap);        Paint paint = new Paint();        paint.setColor(Color.BLACK);        //这里是合成形式        paint.setXfermode(new PorterDuffXfermode(android.graphics.PorterDuff.Mode.DARKEN));                canvas.drawBitmap(bitmap, new Matrix(), paint);        Bitmap ic_luncher = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);        canvas.drawBitmap(ic_luncher, new Matrix(), paint);        iv.setImageBitmap(alterBitmap);

这里是手册上写的,我们可以打开API Demos看一下效果:

颜色处理                                                                                      

android中可以通过颜色矩阵(ColorMatrix类)方面的操作颜色,颜色矩阵是一个5x4 的矩阵。

矩阵的运算规则是矩阵A的一行乘以矩阵C的一列作为矩阵R的一行,C矩阵是图片中包含的ARGB信息,R矩阵是用颜色矩阵应用于C之后的新的颜色分量,运算结果如下:

R' = a*R + b*G + c*B + d*A + e;

G' = f*R + g*G + h*B + i*A + j;

B' = k*R + l*G + m*B + n*A + o;

A' = p*R + q*G + r*B + s*A + t;

颜色矩阵并不是看上去那么深奥,其实需要使用的参数很少,而且很有规律第一行决定红色第二行决定绿色第三行决定蓝色,第四行决定了透明度,第五列是颜色的偏移量。

bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);alterBitmap = Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight(),bitmap.getConfig());canvas = new Canvas(alterBitmap);paint = new Paint();paint.setColor(Color.BLACK);matrix = new Matrix();final ColorMatrix cm = new ColorMatrix();paint.setColorFilter(new ColorMatrixColorFilter(cm));        paint.setAntiAlias(true);canvas.drawBitmap(bitmap, matrix, paint);iv.setImageBitmap(alterBitmap);sb1.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {    @Override    public void onStopTrackingTouch(SeekBar seekBar) {                    int progress = seekBar.getProgress();        System.out.println("progress1--->"+progress);        cm.set(new float[]{            progress/128.0f,0,0,0,0,            0,1,0,0,0,            0,0,1,0,0,            0,0,0,1,0        });        paint.setColorFilter(new ColorMatrixColorFilter(cm));        canvas.drawBitmap(bitmap, matrix, paint);        iv.setImageBitmap(alterBitmap);    }}

我是天王盖地虎的分割线                                                               

源代码:

图形合成.zip

图形颜色处理.zip

图形变换.zip

 

 

 

转载请注明出处:

你可能感兴趣的文章
在Linux服务器、客户端中构建密钥对验证进行远程连接
查看>>
揪出MySQL磁盘消耗迅猛的真凶
查看>>
和“C”的再遇
查看>>
一键安装kubernetes 1.13.0 集群
查看>>
Java内存模型
查看>>
第一讲 机器学习中的数学
查看>>
RabbitMq的集群搭建
查看>>
asp.net web常用控件FileUpload(文件上传控件)
查看>>
动态网页的建立
查看>>
参数展开与特殊字符
查看>>
spring boot + mybatis 同时访问多数据源
查看>>
URL中汉字转码
查看>>
搭建TurnServer服务器
查看>>
转载:PHP性能提升之OPcache相关参数详解
查看>>
[转]Tutorial about USB HID Report Descriptors
查看>>
[转]go正则实例
查看>>
Selector中关于顺序的注意事项
查看>>
font-size: 62.5% 的含义
查看>>
小黑小波比.清空<div>标签内容
查看>>
Java中的ExceptionInInitializerError异常及解决方法
查看>>