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); }
}

我是天王盖地虎的分割线                                                               

源代码:http://pan.baidu.com/s/1dD1Qx01

图形合成.zip

图形颜色处理.zip

图形变换.zip

转载请注明出处:http://www.cnblogs.com/yydcdut

最新文章

  1. git命令查看远程分支
  2. php 函数积累
  3. POJ 2395 Out of Hay 草荒 (MST,Kruscal,最小瓶颈树)
  4. struct TABLE
  5. 利用.htaccess绑定域名到子目录
  6. 【Hibernate】set排序
  7. Can I use MyBatis to generate Dynamic SQL without executing it?
  8. 最近面试java后端开发的感受:如果就以平时项目经验来面试,通过估计很难——再论面试前的准备
  9. zabbix3.4监控Linux客户端
  10. Maven基础:Maven环境搭建及基本使用(1)
  11. Hive实现交叉二维分析的小语句
  12. Spring Boot JPA的Column Table 注解命名字段无效
  13. css选择器querySelectorAll
  14. npm ERR! errno 1 npm ERR! chromedriver@2.35.0 install: `node install.js`
  15. js编码函数一些区别
  16. Spring Cloud Sleuth 服务跟踪
  17. Python爬虫入门 之 如何在豆瓣中获取自己喜欢的TOP N电影信息
  18. 使用scp命令,远程上传下载文件/文件夹
  19. 网页简单布局之结构与表现原则(HTML/CSS)
  20. 如何打开tensorboard观测训练过程

热门文章

  1. C++的一道变态题
  2. 5分钟掌握智联招聘网站爬取并保存到MongoDB数据库
  3. dp 神奇的口袋
  4. 「WC2010」重建计划(长链剖分/点分治)
  5. 【贪心大水题】BZOJ3410-[Usaco2009 Dec]Selfish Grazing 自私的食草者
  6. ThinkPHP -- 去除URL中的index.php
  7. springMvc 的参数验证 BindingResult result 的使用
  8. 【mybatis】mybatis动态order by 的问题, 注意 只需要把#{} 改成 ${} 即可
  9. 将Linux代码移植到Windows的简单方法
  10. 能力成熟度模型CMM