图片颜色处理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



0 0
原创粉丝点击