Android -- 图片处理, 画画板,缩放,旋转,平移,镜面,倒影,图片合成,颜色处理
1. 画画板 示例代码
public class MainActivity extends Activity {
private ImageView iv;
private Bitmap baseBitmap;
private Canvas canvas;
private Paint paint;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv = (ImageView) findViewById(R.id.iv);
paint = new Paint();
paint.setStrokeWidth(5);
paint.setColor(Color.GREEN);
// 创建一个可以被修改的bitmap
baseBitmap = Bitmap.createBitmap(320, 359,
Bitmap.Config.ARGB_8888);
System.out.println("图宽度:"+iv.getWidth());
System.out.println("图宽高:"+iv.getHeight());
canvas = new Canvas(baseBitmap);
canvas.drawColor(Color.WHITE);
// 知道用户手指在屏幕上移动的轨迹
iv.setOnTouchListener(new OnTouchListener() {
//定义手指开始位置的坐标
int startX;
int startY;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: // 手指第一次接触屏幕
System.out.println("手指按下");
startX = (int) event.getX();
startY = (int) event.getY();
break;
case MotionEvent.ACTION_MOVE: // 手指在屏幕上滑动
System.out.println("手指移动");
int newX = (int) event.getX();
int newY = (int) event.getY();
canvas.drawLine(startX,startY, newX, newY, paint);
//重新更新画笔的开始位置.
startX = (int) event.getX();
startY = (int) event.getY();
iv.setImageBitmap(baseBitmap);
break;
case MotionEvent.ACTION_UP:// 手指离开屏幕
break;
}
return true;
}
});
}
public void save(View view) {
try {
File file = new File(Environment.getExternalStorageDirectory(),System.currentTimeMillis()+".jpg");
FileOutputStream stream = new FileOutputStream(file);
baseBitmap.compress(CompressFormat.JPEG, 100, stream);
stream.close();
Toast.makeText(this, "保存图片成功", 1).show();
//模拟一个消息 通知系统sd卡被重新挂载了.
Intent intent = new Intent();
intent.setAction(Intent.ACTION_MEDIA_MOUNTED);
intent.setData(Uri.fromFile(Environment.getExternalStorageDirectory()));
sendBroadcast(intent);
} catch (Exception e) {
Toast.makeText(this, "保存图片失败", 1).show();
e.printStackTrace();
}
}
}
2. 图片缩放
public class MainActivity extends Activity {
private ImageView iv_src;
private ImageView iv_dest;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv_src = (ImageView) findViewById(R.id.iv_src);
iv_src.setImageBitmap(BitmapFactory.decodeFile("/sdcard/tom.png"));
iv_dest = (ImageView) findViewById(R.id.iv_dest);
}
public void click(View view) {
Bitmap bitmap = BitmapFactory.decodeFile("/sdcard/tom.png");
Bitmap baseBitmap = Bitmap.createBitmap(bitmap.getWidth()*2,
bitmap.getHeight()/2, bitmap.getConfig());
Canvas canvas = new Canvas(baseBitmap);
Matrix matrix = new Matrix();
/* matrix.setValues(new float[] {
2, 0, 0,
0, 0.5f, 0,
0, 0, 1
});*/
matrix.setScale(2.0f, 0.5f);
canvas.drawBitmap(bitmap, matrix, new Paint());
iv_dest.setImageBitmap(baseBitmap);
}
}
3. 图片旋转
Matrix matrix = new Matrix(); matrix.setRotate(15); canvas.drawBitmap(bmp, matrix, paint); 消除锯齿 paint.setAntiAlias(true); 指定圆心的旋转 matrix.setRotate(15,bmp.getWidth()/2,bmp.getHeight()/2);
4. 图片平移
matrix.setTranslate(1.5f,-10);
5. 镜面效果
matrix.setScale(-1, 1);
matrix.postTranslate(bmp.getWidth(),0);
6. 倒影
matrix.setScale(1, -1);
matrix.postTranslate(0, bmp.getHeight());
7. 图片合成
public class MainActivity extends Activity {
private ImageView iv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv = (ImageView) findViewById(R.id.iv);
//第一张图
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.a1);
//第二张图
Bitmap addbitMap = BitmapFactory.decodeResource(getResources(), R.drawable.a3);
//可修改的位图 及 画板
Bitmap alterBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), bitmap.getConfig());
Canvas canvas = new Canvas(alterBitmap);
Paint point = new Paint();
point.setColor(Color.BLACK);
point.setXfermode(new PorterDuffXfermode(android.graphics.PorterDuff.Mode.SRC_OVER));//合成模式
//将第一张图和第二张图画到画板的可修改位图上
canvas.drawBitmap(bitmap, new Matrix(), point);
canvas.drawBitmap(addbitMap, new Matrix(), point);
iv.setImageBitmap(alterBitmap);
}
}
8. 颜色处理,RGB颜色, 亮度, 饱和度
亮度处理
ColorMatrix cm = new ColorMatrix();
float contrast = 2;
cm.set(new float[] {
contrast, 0, 0, 0, 0,
0, contrast, 0, 0, 0,
0, 0, contrast, 0, 0,
0, 0, 0, 1, 0 });
paint.setColorFilter(new ColorMatrixColorFilter(cm));
RGB 及 饱和度
public class MainActivity extends Activity {
private ImageView iv1;
private SeekBar sb1;
private SeekBar sb2;
private SeekBar sb3;
private SeekBar sb4;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main2);
iv1 = (ImageView) findViewById(R.id.iv_1);
sb1 = (SeekBar) findViewById(R.id.seekBar1);
sb2 = (SeekBar) findViewById(R.id.seekBar2);
sb3 = (SeekBar) findViewById(R.id.seekBar3);
sb4 = (SeekBar) findViewById(R.id.seekBar4);
sb1.setMax(255);
sb2.setMax(255);
sb3.setMax(255);
sb4.setMax(255);
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.top);
final Bitmap baseBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), bitmap.getConfig());
final Canvas canvas = new Canvas(baseBitmap);
final Matrix matrix = new Matrix();
final Paint paint = new Paint();
canvas.drawBitmap(bitmap, matrix, paint);
iv1.setImageBitmap(baseBitmap);
//调节R 红色
sb1.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
int ret = seekBar.getProgress();
if(ret!=0)
{
ColorMatrix cm = new ColorMatrix();
cm.set(new float[]{
ret/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(baseBitmap, matrix, paint);
iv1.setImageBitmap(baseBitmap);
}
}
});
//调节G 绿色
sb2.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
int ret = seekBar.getProgress();
if(ret!=0)
{
ColorMatrix cm = new ColorMatrix();
cm.set(new float[]{
1,0,0,0,0,
0,ret/128.0f,0,0,0,
0,0,1,0,0,
0,0,0,1,0,
});
paint.setColorFilter(new ColorMatrixColorFilter(cm));
canvas.drawBitmap(baseBitmap, matrix, paint);
iv1.setImageBitmap(baseBitmap);
}
}
});
//调节B 蓝色
sb3.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
int ret = seekBar.getProgress();
if(ret!=0)
{
ColorMatrix cm = new ColorMatrix();
cm.set(new float[]{
1,0,0,0,0,
0,1,0,0,0,
0,0,ret/128.0f,0,0,
0,0,0,1,0,
});
paint.setColorFilter(new ColorMatrixColorFilter(cm));
canvas.drawBitmap(baseBitmap, matrix, paint);
iv1.setImageBitmap(baseBitmap);
}
}
});
//调节 饱和度
sb4.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
int ret = seekBar.getProgress();
if(ret!=0)
{
ColorMatrix cm = new ColorMatrix();
cm.setSaturation(ret/128.0f);
paint.setColorFilter(new ColorMatrixColorFilter(cm));
canvas.drawBitmap(baseBitmap, matrix, paint);
iv1.setImageBitmap(baseBitmap);
}
}
});
}
}
Android -- 图片处理, 画画板,缩放,旋转,平移,镜面,倒影,图片合成,颜色处理的更多相关文章
- Java图片缩略图裁剪水印缩放旋转压缩转格式-Thumbnailator图像处理
前言 java开发中经常遇到对图片的处理,JDK中也提供了对应的工具类,不过处理起来很麻烦,Thumbnailator是一个优秀的图片处理的开源Java类库,处理效果远比Java API的好,从API ...
- CGAffineTransform 缩放 / 旋转 / 平移
CGAffineTransform此类是一个3*3矩阵的变换. - (void)transformImageView { CGAffineTransform t = CGAffineTransform ...
- Android利用canvas画画板
首先新建一个项目工程,建立文件,如下图所示
- Android小应用-----画画板
public class MainActivity extends Activity { private ImageView iv; float startX = 0; float startY = ...
- Android 实现图片画画板
本文主要讲述了Android 实现图片画画板 设计项目布局: <RelativeLayout xmlns:android="http://schemas.android.com/apk ...
- android96 内存创建图片副本,画画板
package com.itheima.copy; import android.os.Bundle; import android.app.Activity; import android.grap ...
- Android DIY之路 (一) 指定区域多图片合成 放大 缩小 镜像 旋转 等(转)
惯例先看效果图 // 注意做类似这种模板功能时候 方位由后台数据提供,这里我们用假数据 4个点 或者xy 加区域来做示例 //一开始我们公司用的是透明盖住 操作图片 但发现 局限性较大.后来直接限定区 ...
- 利用canvas制作图片(可缩放和平移)+相框+文字
前言: 公司一个售前问我能不能用H5做一个手机拍照,给相片添加相框和添加文字上传到服务器的功能,我当时一琢磨觉得可行,就利用空余时间做了一个demo,去掉了拍照和上传,如果以后有机会,会给补上,当然对 ...
- Android开发ImageView控件缩放图片
首先还是最基础的ImageView控件如何显示图片: <ImageView Android:id="@+id/imgView" ...
随机推荐
- mybatis按姓名或手机号搜索
1.AND ((USER_NAME LIKE '%'||#{searchKey}||'%') OR (MOBILE_PHONE LIKE '%'||#{searchKey}||'%'))2. < ...
- JavaScript三(对象思想)
JavaScript并不是面向对象的程序设计语言,但它是基于对象的.JavaScript中的每个函数都可用于创建对象,返回的对象既是该对象的实例,也是object的实例 . 一.对象与关联数组 Jav ...
- 170616、解决 java.lang.IllegalArgumentException: No converter found for return value of type: class java.util.ArrayList
报错截图: 原因:搭建项目的时候,springmvc默认是没有对象转换成json的转换器的,需要手动添加jackson依赖. 解决步骤: 1.添加jackson依赖到pom.xml <!-- j ...
- android的selector选择器
1. drawable/actionbar_compat_item.xml 2.drawable/actionbar_compat_item_pressed.xml 3.drawable/action ...
- 【Loadrunner】使用LoadRunner上传及下载文件
使用LoadRunner上传及下载文件 1)LoadRunner上传文件 web_submit_data("importStudent.do", "Action=http ...
- Myeclipse文档注释如何提炼(导出)成自己的API帮助文档?
第一步: 源码注释规范,一定要用/** 两个*这一特殊的注释.注释上可以添加@author等特殊说明,下图是部分 javadoc 标记 信息,可以根据需要选用. 第二步: 确保整个工程的项目都添加 ...
- HahMap
HashMap的定义 public class HashMap<K, V> extends AbstractMap<K, V> implements Map<K, V&g ...
- POJ1845:Sumdiv(求因子和+逆元+质因子分解)好题
题目链接:http://poj.org/problem?id=1845 定义: 满足a*k≡1 (mod p)的k值就是a关于p的乘法逆元. 为什么要有乘法逆元呢? 当我们要求(a/b) mod p的 ...
- CentOS7系统上部署.net core程序
一.准备工作 首先安装 xshell 和 xftp ,前者用于SSH连接Linux服务器,后者用于FTP上传下载文件. xshell和xftp个人使用是免费的,下载地址 之后分别输入用户名和密码登录主 ...
- FILE 文件的使用 (VC、BCB、Qt)
FILE * fp ;AnsiString filePath="";fp= fopen(filePath.c_str(),"wb");//第二个参数是文件打开方 ...