android图片圆角、图片去色处理示例
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;
}
}
}
相关文章
- 74款android开机动画,修改Android系统开机动画
- android更换开机动画,修改安卓开机动画(除了部分系统 如MIUI等)
- android 验证码短信验证码,Android短信验证码倒计时验证的2种常用方式
- android短信验证码代码,Android短信验证码自动填写实现代码
- 简述android触屏事件的处理_移动端touch事件有哪些
- android 触屏处理流程,android触摸事件处理流程 ? FOOKWOOD「建议收藏」
- Android so文件浅析「建议收藏」
- Android resource linking failed_android sdk location should not
- android 复制控件,Android长按复制文本功能[通俗易懂]
- Android 数据库加密 android-database-sqlcipher 开源版本编译过程
- 【Android 高性能音频】AAudio 状态机 ( 创建 | 打开 Open | 开始 Started | 暂停 Paused | 刷写 Flushed | 停止 Stopped | 关闭 )
- 【Android 性能优化】应用启动优化 ( 安卓应用启动分析 | Launcher 应用简介 | Launcher 应用源码简介 | Launcher 应用快捷方式图标点击方法分析 )
- 【Android 异步操作】线程池 ( 线程池使用示例 | 自定义线程池使用流程 | 自定义任务拒绝处理策略 | 完整代码示例 )
- 【Android TV 开发】焦点处理 ( 父容器与子组件焦点获取关系处理 | 不同电视设备上的兼容问题 | 触摸获取焦点 | 按键获取焦点 )
- 【Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 四 | View 事件传递机制 )
- 【Android 事件分发】ItemTouchHelper 实现侧滑删除
- 【Android Gradle 插件】组件化中的 Gradle 构建脚本实现 ① ( 组件化简介 | 创建组件化应用 | 依赖库模块 / 应用模块 切换设置 )
- Android逆向之Xposed详解手机开发
- Android中的ProgressBar的android:indeterminate详解手机开发
- Replicant:真正自由的 Android 版本
- Android开发之串口编程原理和实现方式
- android自定义Android菜单背景的代码
- android中实现指针滑动的动态效果方法