图片颜色处理RGB-拍照-读取相册-保存修改的图片
来源:互联网 发布:iphone电话黑名单软件 编辑:程序博客网 时间:2024/06/15 21:52
//1.返回图像bitmap对象
bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image);
//2.可修改olterbitmap 属性与 bitmap一致
alterBitemp = Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight(),bitmap.getConfig());
//3.画出来-两张图片-位置基于左上角
//画布
canvas = new Canvas(alterBitemp);
colorMatrix = new ColorMatrix();
paint = new Paint();
// canvas.drawBitmap()画笔-合成模式
paint.setColor(Color.BLACK);
//设置画笔过滤器-new()的颜色矩阵
paint.setColorFilter(new ColorMatrixColorFilter(colorMatrix));
// paint.setAntiAlias(ture);//利用算法消除旋转锯齿
canvas.drawBitmap(bitmap, new Matrix(), paint);
//4.显示imageView
iv.setImageBitmap(alterBitemp);
<pre name="code" class="java">package com.example.imagetoimage;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import android.app.Activity;import android.content.Intent;import android.database.Cursor;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.ColorMatrix;import android.graphics.ColorMatrixColorFilter;import android.graphics.Matrix;import android.graphics.Paint;import android.graphics.PorterDuffXfermode;import android.net.Uri;import android.os.Bundle;import android.os.Environment;import android.provider.MediaStore;import android.view.View;import android.widget.ImageView;import android.widget.SeekBar;import android.widget.SeekBar.OnSeekBarChangeListener;import android.widget.Toast;/** * 图片合成 * 1.先创建画布 * 2.先画A图片 & 在画B图 * 3.合成完毕 * -找不同原理就是利用两张图片重叠 paint.setXfermode()属性设置Darken */public class MainActivity extends Activity {private ImageView iv;private Bitmap bitmap,alterBitemp,ic_luncher;private Canvas canvas;private SeekBar seekBar1,seekBar2,seekBar3,seekBar4;private ColorMatrix colorMatrix;//颜色矩阵private Paint paint;private String filename;//拍照的文件名 private static final String DATA_PATH="/sdcard/imageShared/"; //拍照图片保存目录 private static final String DATA_PATH_VIDEO="/sdcard/VideoShared/"; //相机录像文件保存目录 private static final int REQUESTCODE =1;//requestCode标记,做判断时用到 private static final int REQUESTCODE_SELECT_IMAGE= 2;//选择相册reouestCode @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initSdcard(); iv =(ImageView) findViewById(R.id.iv); seekBar1 = (SeekBar) findViewById(R.id.seekBar1); seekBar2 = (SeekBar) findViewById(R.id.seekBar2); seekBar3 = (SeekBar) findViewById(R.id.seekBar3); seekBar4 = (SeekBar) findViewById(R.id.seekBar4); seekBar1.setOnSeekBarChangeListener(new seekBar1Listen()); seekBar2.setOnSeekBarChangeListener(new seekBar2Listen()); seekBar3.setOnSeekBarChangeListener(new seekBar3Listen()); seekBar4.setOnSeekBarChangeListener(new seekBar4Listen()); //画布-修改图片 // canvasBitmap(); } /** * 画布-修改图片 */ private void canvasBitmap(String path) { System.out.println("fileName"+path); //返回图像bitmap对象 bitmap = BitmapFactory.decodeFile(path, null); // bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image); ic_luncher =BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); //可修改olterbitmap 属性与 bitmap一致 alterBitemp = Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight(),bitmap.getConfig()); System.out.println(bitmap.getWidth()+" :"+bitmap.getHeight()); //画布 canvas = new Canvas(alterBitemp); //canvas.drawBitmap()画笔-合成模式 colorMatrix = new ColorMatrix(); paint = new Paint(); paint.setColor(Color.BLACK); //设置画笔过滤器-new()的颜色矩阵 paint.setColorFilter(new ColorMatrixColorFilter(colorMatrix));// paint.setXfermode(new PorterDuffXfermode(android.graphics.PorterDuff.Mode.MULTIPLY)); //画出来-两张图片-位置基于左上角// paint.setAntiAlias(ture);//利用算法消除旋转锯齿 canvas.drawBitmap(bitmap, new Matrix(), paint); canvas.drawBitmap(ic_luncher, new Matrix(), paint); //------------- //显示imageView iv.setImageBitmap(alterBitemp); }/** * 初始化sdcard信息,创建保存文件的目录 */ private void initSdcard() { //判断是否有SD卡,没有则创建新的 if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ File file = new File(DATA_PATH); File fileVideo = new File(DATA_PATH_VIDEO); if(!file.exists()){ file.mkdir(); Toast.makeText(getApplicationContext(), "创建sdcard/image目录", 1).show(); } if(!fileVideo.exists()){ fileVideo.mkdir(); Toast.makeText(getApplicationContext(), "创建sdcard/video目录", 1).show(); } } }/** * Red */ class seekBar1Listen implements OnSeekBarChangeListener{ @Overridepublic void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) {//int progress1 = seekBar1.getProgress();//停止时的进度colorMatrix.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,});//设置画笔过滤器-new()的颜色矩阵paint.setColorFilter(new ColorMatrixColorFilter(colorMatrix));//---------canvas.drawBitmap(bitmap, new Matrix(), paint); canvas.drawBitmap(ic_luncher, new Matrix(), paint); //显示imageView iv.setImageBitmap(alterBitemp);}@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {}@Overridepublic void onStopTrackingTouch(SeekBar seekBar) {} } /** * blue */ class seekBar2Listen implements OnSeekBarChangeListener{ @Overridepublic void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) {//int progress2 = seekBar1.getProgress();//停止时的进度//值表示颜色变成原来几倍 -中间128/128 原图colorMatrix.set(new float[]{ 1,0,0,0,0,0,progress/128.0f,0,0,0,0,0,1,0,0,0,0,0,1,0,});//设置画笔过滤器-new()的颜色矩阵paint.setColorFilter(new ColorMatrixColorFilter(colorMatrix));//---------canvas.drawBitmap(bitmap, new Matrix(), paint); canvas.drawBitmap(ic_luncher, new Matrix(), paint); //显示imageView iv.setImageBitmap(alterBitemp);}@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {}@Overridepublic void onStopTrackingTouch(SeekBar seekBar) {} } /** * green */class seekBar3Listen implements OnSeekBarChangeListener{@Overridepublic void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) {//int progress3 = seekBar1.getProgress();//停止时的进度//值表示颜色变成原来几倍 -中间128/128 原图colorMatrix.set(new float[]{ 1,0,0,0,0,0,1,0,0,0,0,0,progress/128.0f,0,0,0,0,0,1,0,});//设置画笔过滤器-new()的颜色矩阵paint.setColorFilter(new ColorMatrixColorFilter(colorMatrix));//---------canvas.drawBitmap(bitmap, new Matrix(), paint); canvas.drawBitmap(ic_luncher, new Matrix(), paint); //显示imageView iv.setImageBitmap(alterBitemp);}@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {}@Overridepublic void onStopTrackingTouch(SeekBar seekBar) {}}/** * 对比度:饱和度 * 简单api:0.5f 表示饱和度时原来1/2 * ColorMatrix colorMatrix = new ColorMatrix(); * colorMatrix.setSaturation(0.5f); * paint.setColorFilter(new ColorMatrixColorFilter(colorMatrix)); */class seekBar4Listen implements OnSeekBarChangeListener{@Overridepublic void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) {//int progress3 = seekBar1.getProgress();//停止时的进度//值表示颜色变成原来几倍 -中间128/128 原图colorMatrix.set(new float[]{ progress/128.0f,0,0,0,0,0,progress/128.0f,0,0,0,0,0,progress/128.0f,0,0,0,0,0,1,0,});//设置画笔过滤器-new()的颜色矩阵paint.setColorFilter(new ColorMatrixColorFilter(colorMatrix));//---------canvas.drawBitmap(bitmap, new Matrix(), paint); canvas.drawBitmap(ic_luncher, new Matrix(), paint); //显示imageView iv.setImageBitmap(alterBitemp);}@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {}@Overridepublic void onStopTrackingTouch(SeekBar seekBar) {}}//拍照按钮监听public void MyCamer(View v){//激活系统相机拍照Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");intent.addCategory("android.intent.category.DEFAULT");//filename:生成的图片名称 filename = System.currentTimeMillis()+".jpg"; Uri uri = Uri.fromFile(new File(DATA_PATH+filename)); intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); startActivityForResult(intent,REQUESTCODE); //startActivity(intent);}/** * 选择相册图片 */public void selectImageBut(View v){ //intent 集合系统图库应用,选择照片 Intent intent = new Intent(); intent.setAction(Intent.ACTION_PICK); intent.setType("image/*"); startActivityForResult(intent, REQUESTCODE_SELECT_IMAGE); }/** * 录像机实现 */public void MyVideo(View v){Intent intent = new Intent("android.media.action.VIDEO_CAPTURE");intent.addCategory("android.intent.category.DEFAULT");//filename:录像视频文件保存的路径 filename = System.currentTimeMillis()+".3gp"; Uri uri = Uri.fromFile(new File(DATA_PATH_VIDEO+filename)); intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); startActivity(intent); }/** * 保存修改的Bitmap图片 * 创建保存的图片-文件输出流-Bitemp.compress(格式,压缩比,fOut); */public void SaveBitmapBut(View v){File filePath= new File(DATA_PATH+System.currentTimeMillis()+".jpg");FileOutputStream Fout = null;try {filePath.createNewFile();Fout = new FileOutputStream(filePath);} catch (Exception e) {e.printStackTrace();Toast.makeText(this, "文件创建输出流失败", 0).show();}alterBitemp.compress(Bitmap.CompressFormat.JPEG, 100, Fout);try {Fout.flush();Fout.close();Toast.makeText(this, "保存图像成功", 0).show();} catch (IOException e) {e.printStackTrace();}}/** * 获取被激活的activity返回的值--startActivityForResult() */@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { Toast.makeText(getApplicationContext(), "in onActivityResult success", 1).show(); //拍照-REQUESTCODE=1 if(resultCode==RESULT_OK && requestCode==REQUESTCODE){ iv.setImageURI(Uri.parse(DATA_PATH+filename)); canvasBitmap(DATA_PATH+filename);//调用画布 } //选择相册-REQUESTCODE_SELECT_IMAGE=2 if(resultCode==RESULT_OK && requestCode==REQUESTCODE_SELECT_IMAGE){ //图片uri路径 -gallery 图库程序源代码 Uri uri = data.getData(); iv.setImageURI(uri); String fileName = getAbsoluteImagePath(uri); System.out.println(fileName); canvasBitmap(fileName);//调用画布 } } /** * 获取uri绝对路径 * @param uri 传入的uri * @return String 绝对路径 */protected String getAbsoluteImagePath(Uri uri) { // can post image String [] proj={MediaStore.Images.Media.DATA}; Cursor cursor = managedQuery( uri, proj, // Which columns to return null, // WHERE clause; which rows to return (all rows) null, // WHERE clause selection arguments (none) null); // Order-by clause (ascending by name) int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); return cursor.getString(column_index); } }
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.imagetoimage.MainActivity" > <SeekBar android:id="@+id/seekBar1" android:max="255" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:onClick="seekBar1Listen"/> <SeekBar android:id="@+id/seekBar2" android:max="255" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/seekBar1" android:onClick="seekBar2Listen"/> <SeekBar android:id="@+id/seekBar3" android:max="255" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/seekBar2" android:onClick="seekBar3Listen"/> <SeekBar android:id="@+id/seekBar4" android:max="255" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/seekBar3" android:onClick="seekBar4Listen" /> <ImageView android:id="@+id/iv" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/seekBar4" android:layout_alignParentBottom="true" /></RelativeLayout>
Code and App:http://pan.baidu.com/s/1bnGlVbx
- 图片颜色处理RGB-拍照-读取相册-保存修改的图片
- 关于相册图片,和拍照图片的处理
- IOS 永久保存相册或相机拍照的图片
- android相册拍照保存图片到本地
- 拍照相册和裁剪保存图片集合
- 拍照/选择相册,图片压缩旋转处理
- Android 修改Bitmap图片像素的信息 RGB颜色值
- 关于拍照相册读取裁剪图片显示图片的比较好的博客
- Android开发:相册读取、拍照、图片裁剪和图片上传服务器等功能的实现
- 读取手机相册,从手机相册读取图片剪切,拍照获取图片,获取拍照图片进行剪切
- 拍照选择-相册图片裁剪后保存在指定的地址
- 打开相机拍照与 读取背地相册图片
- iOS uitableview自定义相册(实现拍照并保存在指定目录以相册的形式展示图片)
- Android 读取拍照或相册uri 转换成图片的绝对路径
- ios--图片处理(修改、保存)
- 上传图片到服务器和图片内存处理以及拍照或从相册选取图片的小总结
- android获取相册图片 拍照获取图片 用到的东西
- 调用相机拍照,处理图片旋转,保存图片
- C++ string类的隐式共享写时拷贝的实现及设计要点
- HDU 4998 Rotate
- ext消息框
- 函数模板
- Android学习笔记——安卓环境搭建
- 图片颜色处理RGB-拍照-读取相册-保存修改的图片
- poj 5001 Walk &&2014 ACM/ICPC Asia Regional Anshan Online 1005(dp)
- wm算法
- 解决PNG图片在IE6中背景不透明方法
- nutch相关目录说明
- 武汉一起好面试心得体会
- 题目1172:哈夫曼树 九度
- setjmp和longjmp函数使用详解
- poj2386