android图片处理技巧

本文介绍了使用ImgUtil库进行图片处理的方法,包括放大缩小、转换Drawable为Bitmap、创建圆角图片以及生成带倒影的图片。通过这些操作,可以实现多样化的图片效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

packagecom.img.util;

importandroid.graphics.Bitmap;
importandroid.graphics.Bitmap.Config;
importandroid.graphics.Canvas;
importandroid.graphics.LinearGradient;
importandroid.graphics.Matrix;
importandroid.graphics.Paint;
importandroid.graphics.PixelFormat;
importandroid.graphics.PorterDuff.Mode;
importandroid.graphics.PorterDuffXfermode;
importandroid.graphics.Rect;
importandroid.graphics.RectF;
importandroid.graphics.Shader.TileMode;
importandroid.graphics.drawable.Drawable;

publicclassImgUtil{
//放大缩小图片
publicstaticBitmapzoomBitmap(Bitmapbitmap,intw,inth){
intwidth=bitmap.getWidth();
intheight=bitmap.getHeight();
Matrixmatrix
=newMatrix();
floatscaleWidth=((float)w/width);
floatscaleHeight=((float)h/height);
matrix.postScale(scaleWidth,scaleHeight);
BitmapnewBmp
=Bitmap.createBitmap(bitmap,0,0,width,height,
matrix,
true);
returnnewBmp;
}

//将Drawable转化为Bitmap
publicstaticBitmapdrawableToBitmap(Drawabledrawable){
intwidth=drawable.getIntrinsicWidth();
intheight=drawable.getIntrinsicHeight();
Bitmapbitmap
=Bitmap.createBitmap(width,height,drawable
.getOpacity()
!=PixelFormat.OPAQUE?Bitmap.Config.ARGB_8888
:Bitmap.Config.RGB_565);
Canvascanvas
=newCanvas(bitmap);
drawable.setBounds(
0,0,width,height);
drawable.draw(canvas);
returnbitmap;
}

//圆角图片
publicstaticBitmapgetRoundedCornerBitmap(Bitmapbitmap,floatroundPx){
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);

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;
}

//获得带倒影的图片方法
publicstaticBitmapcreateReflectionImageWithOrigin(Bitmapbitmap){
finalintreflectionGap=4;
intwidth=bitmap.getWidth();
intheight=bitmap.getHeight();

Matrixmatrix
=newMatrix();
matrix.preScale(
1,-1);

BitmapreflectionImage
=Bitmap.createBitmap(bitmap,0,height/2,
width,height
/2,matrix,false);

BitmapbitmapWithReflection
=Bitmap.createBitmap(width,
(height
+height/2),Config.ARGB_8888);

Canvascanvas
=newCanvas(bitmapWithReflection);
canvas.drawBitmap(bitmap,
0,0,null);
PaintdeafalutPaint
=newPaint();
canvas.drawRect(
0,height,width,height+reflectionGap,deafalutPaint);

canvas.drawBitmap(reflectionImage,
0,height+reflectionGap,null);

Paintpaint
=newPaint();
LinearGradientshader
=newLinearGradient(0,bitmap.getHeight(),0,
bitmapWithReflection.getHeight()
+reflectionGap,0x70ffffff,
0x00ffffff,TileMode.CLAMP);
paint.setShader(shader);
//SettheTransfermodetobeporterduffanddestinationin
paint.setXfermode(newPorterDuffXfermode(Mode.DST_IN));
//Drawarectangleusingthepaintwithourlineargradient
canvas.drawRect(0,height,width,bitmapWithReflection.getHeight()
+reflectionGap,paint);

returnbitmapWithReflection;
}
}

packagecom.img.util;

importandroid.app.Activity;
importandroid.graphics.Bitmap;
importandroid.graphics.drawable.Drawable;
importandroid.os.Bundle;
importandroid.widget.ImageView;

publicclassMainActivityextendsActivity{
privateImageViewmImageView01,mImageView02;

@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setupViews();
}

privatevoidsetupViews(){
mImageView01
=(ImageView)findViewById(R.id.image01);
mImageView02
=(ImageView)findViewById(R.id.image02);

//获取壁纸返回值是Drawable
Drawabledrawable=getWallpaper();
//将Drawable转化为Bitmap
Bitmapbitmap=ImgUtil.drawableToBitmap(drawable);
//缩放图片
BitmapzoomBitmap=ImgUtil.zoomBitmap(bitmap,100,100);
//获取圆角图片
BitmaproundBitmap=ImgUtil
.getRoundedCornerBitmap(zoomBitmap,
10.0f);
//获取倒影图片
BitmapreflectBitmap=ImgUtil
.createReflectionImageWithOrigin(zoomBitmap);
//这里可以让Bitmap再转化为Drawable
//DrawableroundDrawable=newBitmapDrawable(roundBitmap);
//DrawablereflectDrawable=newBitmapDrawable(reflectBitmap);
//mImageView01.setBackgroundDrawable(roundDrawable);
//mImageView02.setBackgroundDrawable(reflectDrawable);

mImageView01.setImageBitmap(roundBitmap);
mImageView02.setImageBitmap(reflectBitmap);
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值