android图片处理方法(不断收集中…

来源:互联网 发布:网络电视需要什么 编辑:程序博客网 时间:2024/06/04 18:18
Android 中图片处理方法技巧大汇总,几乎涵盖了所有的图片处理方法!
http://gundumw100.iteye.com/blog/849729

http://www.cnblogs.com/lbangel/p/3612588.html

再奉上一个自己整理的图片处理工具类,里边都是静态方法,可以直接调用就好:
package com.lyc.image.tools;

public class ImageTools {

    publicstatic Bitmap toGrayscale(Bitmap bmpOriginal) {
       int width,height;
       height =bmpOriginal.getHeight();
       width =bmpOriginal.getWidth();
       BitmapbmpGrayscale = Bitmap.createBitmap(width, height,
            Bitmap.Config.RGB_565);
       Canvas c =new Canvas(bmpGrayscale);
       Paint paint= new Paint();
       ColorMatrixcm = new ColorMatrix();
      cm.setSaturation(0);
      ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);
      paint.setColorFilter(f);
      c.drawBitmap(bmpOriginal, 0, 0, paint);
       returnbmpGrayscale;
    }

  
   
    publicstatic Bitmap toGrayscale(Bitmap bmpOriginal, int pixels) {
       returntoRoundCorner(toGrayscale(bmpOriginal), pixels);
    }

  
   
    publicstatic Bitmap toRoundCorner(Bitmap bitmap, int pixels) {

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

       final intcolor = 0xff424242;
       final Paintpaint = new Paint();
       final Rectrect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
       final RectFrectF = new RectF(rect);
       final floatroundPx = pixels;

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

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

       returnoutput;
    }

 
   
    publicstatic BitmapDrawable toRoundCorner(BitmapDrawablebitmapDrawable,
          int pixels){
       Bitmapbitmap = bitmapDrawable.getBitmap();
      bitmapDrawable = new BitmapDrawable(toRoundCorner(bitmap,pixels));
       returnbitmapDrawable;
    }

   
    publicstatic void saveBefore(String path) {
      BitmapFactory.Options options = new BitmapFactory.Options();
      options.inJustDecodeBounds = true;
       //获取这个图片的宽和高
       Bitmapbitmap = BitmapFactory.decodeFile(path, options); // 此时返回bm为空
      options.inJustDecodeBounds = false;
       //计算缩放比
       int be =(int) (options.outHeight / (float) 200);
       if (be <=0)
          be =1;
      options.inSampleSize = 2; // 图片长宽各缩小二分之一
       //重新读入图片,注意这次要把options.inJustDecodeBounds 设为 false哦
       bitmap =BitmapFactory.decodeFile(path, options);
       int w =bitmap.getWidth();
       int h =bitmap.getHeight();
      System.out.println(w + "   " +h);
       //savePNG_After(bitmap,path);
      saveJPGE_After(bitmap, path);
    }

   
    publicstatic void savePNG_After(Bitmap bitmap, String name) {
       File file =new File(name);
       try {
         FileOutputStream out = new FileOutputStream(file);
          if(bitmap.compress(Bitmap.CompressFormat.PNG, 100, out)) {
            out.flush();
            out.close();
          }
       } catch(FileNotFoundException e) {
         e.printStackTrace();
       } catch(IOException e) {
         e.printStackTrace();
       }
    }

   
    publicstatic void saveJPGE_After(Bitmap bitmap, String path) {
       File file =new File(path);
       try {
         FileOutputStream out = new FileOutputStream(file);
          if(bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out)) {
            out.flush();
            out.close();
          }
       } catch(FileNotFoundException e) {
         e.printStackTrace();
       } catch(IOException e) {
         e.printStackTrace();
       }
    }

   
    privateBitmap createBitmap(Bitmap src, Bitmap watermark) {
       if (src ==null) {
          returnnull;
       }
       int w =src.getWidth();
       int h =src.getHeight();
       int ww =watermark.getWidth();
       int wh =watermark.getHeight();
       // createthe new blank bitmap
       Bitmap newb= Bitmap.createBitmap(w, h, Config.ARGB_8888);//创建一个新的和SRC长度宽度一样的位图
       Canvas cv =new Canvas(newb);
       // draw srcinto
      cv.drawBitmap(src, 0, 0, null);// 在 0,0坐标开始画入src
       // drawwatermark into
      cv.drawBitmap(watermark, w - ww + 5, h - wh + 5, null);//在src的右下角画入水印
       // save allclip
      cv.save(Canvas.ALL_SAVE_FLAG);// 保存
       //store
      cv.restore();// 存储
       returnnewb;
    }

    //将图片转换成byte[]以便能将其存到数据库
    publicstatic byte[] getByteFromBitmap(Bitmap bitmap) {
      ByteArrayOutputStream out = new ByteArrayOutputStream();
      bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
       try {
         out.flush();
         out.close();
       } catch(IOException e) {
         e.printStackTrace();
          //Log.e(TAG, "transform byte exception");
       }
       returnout.toByteArray();
    }

    //得到存储在数据库中的图片
    // egimageView.setImageBitmap(bitmapobj);
    publicstatic Bitmap getBitmapFromByte(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类型
    publicstatic Bitmap getBitemapFromFile(File f) {
       if(!f.exists())
          returnnull;
       try {
          returnBitmapFactory.decodeFile(f.getAbsolutePath());
       } catch(Exception ex) {
          returnnull;
       }
    }
   //将手机中的文件转换为Bitmap类型(重载+1)
    publicstatic Bitmap getBitemapFromFile(String fileName) {
      
       try {
          returnBitmapFactory.decodeFile(fileName);
       } catch(Exception ex) {
          returnnull;
       }
    }

 //压缩图片
  public static voidcompressBmpToFile(Bitmap bmp,File file){
              ByteArrayOutputStream baos =new ByteArrayOutputStream();
              int options = 90;
             bmp.compress(Bitmap.CompressFormat.JPEG, options, baos);
              while(baos.toByteArray().length / 1024 > 100) {
                    baos.reset();
                     options -=10;
                    bmp.compress(Bitmap.CompressFormat.JPEG, options, baos);
              }
              try {
                    FileOutputStream fos = new FileOutputStream(file);
                    fos.write(baos.toByteArray());
                    fos.flush();
                    fos.close();
              } catch (Exception e) {
                    e.printStackTrace();
              }
       }

ps该方法是压缩图片的质量,注意它不会减少图片的像素,比方说, 你的图片是300K的, 1280*700像素的, 经过该方法压缩后,File形式的图片是在100以下, 以方便上传服务器,但是你BitmapFactory.decodeFile到内存中,变成Bitmap时,它的像素仍然是1280*700,计算图片像素的方法是 bitmap.getWidth()和bitmap.getHeight()。
}
0 0