Android BitmapUtils工具类使用详解
本文实例为大家分享了AndroidBitmapUtils工具类的具体代码,供大家参考,具体内容如下
publicfinalclassBitmapUtils{
publicstaticfinalStringTAG="BitmapUtil";
privatestaticintsShotScreenWidth=480;
privatestaticintsShotScreenHeight=720;
privatestaticintsShotScreenSize=sShotScreenWidth*sShotScreenHeight;
@SuppressLint("StaticFieldLeak")
privatestaticContextmContext;
@SuppressLint("StaticFieldLeak")
privatestaticActivitymActivity;
publicvoidinit(Contextcontext,Activityac){
mContext=context;
mActivity=ac;
DisplayMetricsdm=newDisplayMetrics();
ac.getWindowManager().getDefaultDisplay().getMetrics(dm);
//获取屏幕分辨率
sShotScreenWidth=dm.widthPixels;
sShotScreenHeight=dm.heightPixels;
sShotScreenSize=sShotScreenWidth*sShotScreenHeight;
}
/**
*图片合成
*
*@parambitmap位图1
*@parammark位图2
*@returnBitmap
*/
publicstaticBitmapcreateBitmap(Bitmapbitmap,Bitmapmark){
intw=bitmap.getWidth();
inth=bitmap.getHeight();
intmW=mark.getWidth();
intmH=mark.getHeight();
Bitmapnewbitmap=Bitmap.createBitmap(w,h,Config.ARGB_8888);//创建一个长宽一样的位图
Canvascv=newCanvas(newbitmap);
cv.drawBitmap(bitmap,0,0,null);//在0,0坐标开始画入bitmap
cv.drawBitmap(mark,w-mW,h-mH,null);//在右下角画入水印mark
cv.save(Canvas.ALL_SAVE_FLAG);//保存
cv.restore();//存储
returnnewbitmap;
}
/**
*放大缩小图片
*@parambitmap位图
*@paramw新的宽度
*@paramh新的高度
*@returnBitmap
*/
publicstaticBitmapzoomBitmap(Bitmapbitmap,intw,inth){
intwidth=bitmap.getWidth();
intheight=bitmap.getHeight();
Matrixmatrix=newMatrix();
floatscaleWidht=((float)w/width);
floatscaleHeight=((float)h/height);
matrix.postScale(scaleWidht,scaleHeight);
returnBitmap.createBitmap(bitmap,0,0,width,height,matrix,true);
}
/**
*旋转图片
*@parambitmap要旋转的图片
*@paramangle旋转角度
*@returnbitmap
*/
publicstaticBitmaprotate(Bitmapbitmap,intangle){
Matrixmatrix=newMatrix();
matrix.postRotate(angle);
returnBitmap.createBitmap(bitmap,0,0,bitmap.getWidth(),
bitmap.getHeight(),matrix,true);
}
/**
*圆形图片
*@paramsource位图
*@paramstrokeWidth裁剪范围0表示最大
*@parambl是否需要描边
*@parambl画笔粗细
*@parambl颜色代码
*@returnbitmap
*/
publicstaticBitmapcreateCircleBitmap(Bitmapsource,intstrokeWidth,booleanbl,intedge,intcolor){
intdiameter=source.getWidth()1){
//缩放图片此处用到平方根将宽带和高度压缩掉对应的平方根倍
//(保持宽高不变,缩放后也达到了最大占用空间的大小)
returnscaleWithWH(bitmap,bitmap.getWidth()/Math.sqrt(i),
bitmap.getHeight()/Math.sqrt(i));
}
returnnull;
}
/***
*图片缩放
*@parambitmap位图
*@paramw新的宽度
*@paramh新的高度
*@returnBitmap
*/
publicstaticBitmapscaleWithWH(Bitmapbitmap,doublew,doubleh){
if(w==0||h==0||bitmap==null){
returnbitmap;
}else{
intwidth=bitmap.getWidth();
intheight=bitmap.getHeight();
Matrixmatrix=newMatrix();
floatscaleWidth=(float)(w/width);
floatscaleHeight=(float)(h/height);
matrix.postScale(scaleWidth,scaleHeight);
returnBitmap.createBitmap(bitmap,0,0,width,height,
matrix,true);
}
}
/**
*YUV视频流格式转bitmap
*@paramdataYUV视频流格式
*@returnwidth设置宽度
*@returnwidth设置高度
*/
publicstaticBitmapgetBitmap(byte[]data,intwidth,intheight){
Bitmapbitmap;
YuvImageyuvimage=newYuvImage(data,ImageFormat.NV21,width,height,null);
//data是onPreviewFrame参数提供
ByteArrayOutputStreambaos=newByteArrayOutputStream();
yuvimage.compressToJpeg(newRect(0,0,yuvimage.getWidth(),yuvimage.getHeight()),100,baos);//
//80--JPG图片的质量[0-100],100最高
byte[]rawImage=baos.toByteArray();
BitmapFactory.Optionsoptions=newBitmapFactory.Options();
SoftReferencesoftRef=newSoftReference(BitmapFactory.decodeByteArray(rawImage,0,rawImage
.length,options));
bitmap=softRef.get();
returnbitmap;
}
/**
*图片路径转bitmap
*@paramfile图片的绝对路径
*@returnbitmap
*/
publicstaticBitmapgetAssetImage(Stringfile){
Bitmapbitmap=null;
AssetManageram=mActivity.getAssets();
try{
InputStreamis=am.open(file);
bitmap=BitmapFactory.decodeStream(is);
is.close();
}catch(IOExceptione){
e.printStackTrace();
}
returnbitmap;
}
/**
*bitmap保存到指定路径
*@paramfile图片的绝对路径
*@paramfile位图
*@returnbitmap
*/
publicstaticbooleansaveFile(Stringfile,Bitmapbmp){
if(TextUtils.isEmpty(file)||bmp==null)returnfalse;
Filef=newFile(file);
if(f.exists()){
f.delete();
}else{
Filep=f.getParentFile();
if(!p.exists()){
p.mkdirs();
}
}
try{
FileOutputStreamout=newFileOutputStream(f);
bmp.compress(Bitmap.CompressFormat.JPEG,100,out);
out.flush();
out.close();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
returnfalse;
}
returntrue;
}
/**
*回收一个未被回收的Bitmap
*@parambitmap
*/
publicstaticvoiddoRecycledIfNot(Bitmapbitmap){
if(!bitmap.isRecycled()){
bitmap.recycle();
}
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。