zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

android图片圆角、图片去色处理示例

Android 处理 示例 图片 圆角 去色
2023-06-13 09:15:26 时间

Android中图片处理

用来对Android中的项目图片进行处理

复制代码代码如下:


packagecom.zhanggeng.contact.tools;

importjava.io.ByteArrayOutputStream;
importjava.io.File;
importjava.io.FileNotFoundException;
importjava.io.FileOutputStream;
importjava.io.IOException;

importandroid.graphics.Bitmap;
importandroid.graphics.Bitmap.Config;
importandroid.graphics.BitmapFactory;
importandroid.graphics.Canvas;
importandroid.graphics.ColorMatrix;
importandroid.graphics.ColorMatrixColorFilter;
importandroid.graphics.Paint;
importandroid.graphics.PorterDuff.Mode;
importandroid.graphics.PorterDuffXfermode;
importandroid.graphics.Rect;
importandroid.graphics.RectF;
importandroid.graphics.drawable.BitmapDrawable;
importandroid.view.ViewGroup;
importandroid.view.animation.AccelerateInterpolator;

/**
 *处理图片的工具类.
 *
 */
publicclassImageTools{

 /***/
 /**
 *图片去色,返回灰度图片
 *
 *@parambmpOriginal
 *           传入的图片
 *@return去色后的图片
 */
 publicstaticBitmaptoGrayscale(BitmapbmpOriginal){
  intwidth,height;
  height=bmpOriginal.getHeight();
  width=bmpOriginal.getWidth();
  BitmapbmpGrayscale=Bitmap.createBitmap(width,height,
    Bitmap.Config.RGB_565);
  Canvasc=newCanvas(bmpGrayscale);
  Paintpaint=newPaint();
  ColorMatrixcm=newColorMatrix();
  cm.setSaturation(0);
  ColorMatrixColorFilterf=newColorMatrixColorFilter(cm);
  paint.setColorFilter(f);
  c.drawBitmap(bmpOriginal,0,0,paint);
  returnbmpGrayscale;
 }

 /***/
 /**
 *去色同时加圆角
 *
 *@parambmpOriginal
 *           原图
 *@parampixels
 *           圆角弧度
 *@return修改后的图片
 */
 publicstaticBitmaptoGrayscale(BitmapbmpOriginal,intpixels){
  returntoRoundCorner(toGrayscale(bmpOriginal),pixels);
 }

 /***/
 /**
 *把图片变成圆角
 *
 *@parambitmap
 *           需要修改的图片
 *@parampixels
 *           圆角的弧度
 *@return圆角图片
 */
 publicstaticBitmaptoRoundCorner(Bitmapbitmap,intpixels){

  Bitmapoutput=Bitmap.createBitmap(bitmap.getWidth(),
    bitmap.getHeight(),Config.ARGB_8888);
  Canvascanvas=newCanvas(output);

  finalintcolor=0xff424242;
  finalPaintpaint=newPaint();
  finalRectrect=newRect(0,0,bitmap.getWidth(),bitmap.getHeight());
  finalRectFrectF=newRectF(rect);
  finalfloatroundPx=pixels;

  paint.setAntiAlias(true);
  canvas.drawARGB(0,0,0,0);
  paint.setColor(color);
  canvas.drawRoundRect(rectF,roundPx,roundPx,paint);

  paint.setXfermode(newPorterDuffXfermode(Mode.SRC_IN));
  canvas.drawBitmap(bitmap,rect,rect,paint);

  returnoutput;
 }

 /***/
 /**
 *使圆角功能支持BitampDrawable
 *
 *@parambitmapDrawable
 *@parampixels
 *@return
 */
 publicstaticBitmapDrawabletoRoundCorner(BitmapDrawablebitmapDrawable,
   intpixels){
  Bitmapbitmap=bitmapDrawable.getBitmap();
  bitmapDrawable=newBitmapDrawable(toRoundCorner(bitmap,pixels));
  returnbitmapDrawable;
 }

 /**
 *读取路径中的图片,然后将其转化为缩放后的bitmap
 *
 *@parampath
 */
 publicstaticvoidsaveBefore(Stringpath){
  BitmapFactory.Optionsoptions=newBitmapFactory.Options();
  options.inJustDecodeBounds=true;
  //获取这个图片的宽和高
  Bitmapbitmap=BitmapFactory.decodeFile(path,options);//此时返回bm为空
  options.inJustDecodeBounds=false;
  //计算缩放比
  intbe=(int)(options.outHeight/(float)200);
  if(be<=0)
   be=1;
  options.inSampleSize=2;//图片长宽各缩小二分之一
  //重新读入图片,注意这次要把options.inJustDecodeBounds设为false哦
  bitmap=BitmapFactory.decodeFile(path,options);
  intw=bitmap.getWidth();
  inth=bitmap.getHeight();
  System.out.println(w+"  "+h);
  //savePNG_After(bitmap,path);
  saveJPGE_After(bitmap,path);
 }

 /**
 *保存图片为PNG
 *
 *@parambitmap
 *@paramname
 */
 publicstaticvoidsavePNG_After(Bitmapbitmap,Stringname){
  Filefile=newFile(name);
  try{
   FileOutputStreamout=newFileOutputStream(file);
   if(bitmap.compress(Bitmap.CompressFormat.PNG,100,out)){
    out.flush();
    out.close();
   }
  }catch(FileNotFoundExceptione){
   e.printStackTrace();
  }catch(IOExceptione){
   e.printStackTrace();
  }
 }

 /**
 *保存图片为JPEG
 *
 *@parambitmap
 *@parampath
 */
 publicstaticvoidsaveJPGE_After(Bitmapbitmap,Stringpath){
  Filefile=newFile(path);
  try{
   FileOutputStreamout=newFileOutputStream(file);
   if(bitmap.compress(Bitmap.CompressFormat.JPEG,100,out)){
    out.flush();
    out.close();
   }
  }catch(FileNotFoundExceptione){
   e.printStackTrace();
  }catch(IOExceptione){
   e.printStackTrace();
  }
 }

 /**
 *图片合成
 *
 *@parambitmap
 *@return
 */
 privateBitmapcreateBitmap(Bitmapsrc,Bitmapwatermark){
  if(src==null){
   returnnull;
  }
  intw=src.getWidth();
  inth=src.getHeight();
  intww=watermark.getWidth();
  intwh=watermark.getHeight();
  //createthenewblankbitmap
  Bitmapnewb=Bitmap.createBitmap(w,h,Config.ARGB_8888);//创建一个新的和SRC长度宽度一样的位图
  Canvascv=newCanvas(newb);
  //drawsrcinto
  cv.drawBitmap(src,0,0,null);//在0,0坐标开始画入src
  //drawwatermarkinto
  cv.drawBitmap(watermark,w-ww+5,h-wh+5,null);//在src的右下角画入水印
  //saveallclip
  cv.save(Canvas.ALL_SAVE_FLAG);//保存
  //store
  cv.restore();//存储
  returnnewb;
 }

 //将图片转换成byte[]以便能将其存到数据库
 publicstaticbyte[]getByteFromBitmap(Bitmapbitmap){
  ByteArrayOutputStreamout=newByteArrayOutputStream();
  bitmap.compress(Bitmap.CompressFormat.JPEG,100,out);
  try{
   out.flush();
   out.close();
  }catch(IOExceptione){
   e.printStackTrace();
   //Log.e(TAG,"transformbyteexception");
  }
  returnout.toByteArray();
 }

 //得到存储在数据库中的图片
 //egimageView.setImageBitmap(bitmapobj);
 publicstaticBitmapgetBitmapFromByte(byte[]temp){
  if(temp!=null){
   Bitmapbitmap=BitmapFactory.decodeByteArray(temp,0,temp.length);
   returnbitmap;
  }else{
   //Bitmapbitmap=BitmapFactory.decodeResource(getResources(),
   //R.drawable.contact_add_icon);
   returnnull;
  }
 }
   //将手机中的文件转换为Bitmap类型
 publicstaticBitmapgetBitemapFromFile(Filef){
  if(!f.exists())
   returnnull;
  try{
   returnBitmapFactory.decodeFile(f.getAbsolutePath());
  }catch(Exceptionex){
   returnnull;
  }
 }
 //将手机中的文件转换为Bitmap类型(重载+1)
 publicstaticBitmapgetBitemapFromFile(StringfileName){

  try{
   returnBitmapFactory.decodeFile(fileName);
  }catch(Exceptionex){
   returnnull;
  }
 }

}