Android 图片操作

本文提供了一系列Java代码实现图片处理功能,包括放大缩小图片、将Drawable转化为Bitmap、获取圆角图片、创建带倒影的图片等实用技巧。这些方法适用于Android开发中图片的高效管理和展示。

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

Java代码  收藏代码
  1. package com.lp.imageUI;    
  2.     
  3. import android.graphics.Bitmap;    
  4. import android.graphics.Canvas;    
  5. import android.graphics.LinearGradient;    
  6. import android.graphics.Matrix;    
  7. import android.graphics.Paint;    
  8. import android.graphics.PixelFormat;    
  9. import android.graphics.PorterDuffXfermode;    
  10. import android.graphics.Rect;    
  11. import android.graphics.RectF;    
  12. import android.graphics.Bitmap.Config;    
  13. import android.graphics.PorterDuff.Mode;    
  14. import android.graphics.Shader.TileMode;    
  15. import android.graphics.drawable.Drawable;    
  16. public class ImageUtil    
  17.         
  18.     //放大缩小图片    
  19.     public static Bitmap zoomBitmap(Bitmap bitmap,int w,int h){    
  20.         int width bitmap.getWidth();    
  21.         int height bitmap.getHeight();    
  22.         Matrix matrix new Matrix();    
  23.         float scaleWidht ((float)w width);    
  24.         float scaleHeight ((float)h height);    
  25.         matrix.postScale(scaleWidht, scaleHeight);    
  26.         Bitmap newbmp Bitmap.createBitmap(bitmap, 00width, height, matrix, true);    
  27.         return newbmp;    
  28.        
  29.     //将Drawable转化为Bitmap    
  30.      public static Bitmap drawableToBitmap(Drawable drawable){    
  31.             int width drawable.getIntrinsicWidth();    
  32.             int height drawable.getIntrinsicHeight();    
  33.             Bitmap bitmap Bitmap.createBitmap(width, height,    
  34.                     drawable.getOpacity() != PixelFormat.OPAQUE Bitmap.Config.ARGB_8888    
  35.                             Bitmap.Config.RGB_565);    
  36.             Canvas canvas new Canvas(bitmap);    
  37.             drawable.setBounds(0,0,width,height);    
  38.             drawable.draw(canvas);    
  39.             return bitmap;    
  40.                 
  41.            
  42.          
  43.      //获得圆角图片的方法    
  44.     public static Bitmap getRoundedCornerBitmap(Bitmap bitmap,float roundPx){    
  45.             
  46.         Bitmap output Bitmap.createBitmap(bitmap.getWidth(), bitmap    
  47.                 .getHeight(), Config.ARGB_8888);    
  48.         Canvas canvas new Canvas(output);    
  49.      
  50.         final int color 0xff424242   
  51.         final Paint paint new Paint();    
  52.         final Rect rect new Rect(00bitmap.getWidth(), bitmap.getHeight());    
  53.         final RectF rectF new RectF(rect);    
  54.      
  55.         paint.setAntiAlias(true);    
  56.         canvas.drawARGB(0000);    
  57.         paint.setColor(color);    
  58.             
  59.         canvas.drawRoundRect(rectF, roundPx, roundPx+10paint);    
  60.         //设置两张图片相交时的模式    
  61.         //setXfermode前的是 dst 之后的是src    
  62.         //在正常的情况下,在已有的图像上绘图将会在其上面添加一层新的形状。     
  63.         //如果新的Paint是完全不透明的,那么它将完全遮挡住下面的Paint;    
  64.         //PorterDuffXfermode就可以来解决这个问题    
  65.         //canvas原有的图片 可以理解为背景 就是dst    
  66.         //新画上去的图片 可以理解为前景 就是src    
  67. //      paint.setXfermode(new PorterDuffXfermode(Mode.SRC_OUT));    
  68.         paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));    
  69.         canvas.drawBitmap(bitmap, rect, rect, paint);    
  70.      
  71.         return output;    
  72.        
  73.     //获得带倒影的图片方法    
  74.     public static Bitmap createReflectionImageWithOrigin(Bitmap bitmap){    
  75.         // 图片与倒影间隔距离      
  76.         final int reflectionGap 4   
  77.         // 图片的宽度      
  78.         int width bitmap.getWidth();    
  79.          // 图片的高度      
  80.         int height bitmap.getHeight();    
  81.             
  82.         Matrix matrix new Matrix();    
  83.         // 图片缩放,x轴变为原来的1倍,y轴为-1倍,实现图片的反转    
  84.         matrix.preScale(1-1);    
  85.         // 创建反转后的图片Bitmap对象,图片高是原图的一半。      
  86.         Bitmap reflectionImage Bitmap.createBitmap(bitmap,     
  87.                 0height/2width, height/2matrix, false);    
  88.         // 创建标准的Bitmap对象,宽和原图一致,高是原图的1.5倍。 可以理解为这张图将会在屏幕上显示 是原图和倒影的合体      
  89.         Bitmap bitmapWithReflection Bitmap.createBitmap(width, (height height/2), Config.ARGB_8888);    
  90.          // 构造函数传入Bitmap对象,为了在图片上画图      
  91.         Canvas canvas new Canvas(bitmapWithReflection);    
  92.         // 画原始图片      
  93.         canvas.drawBitmap(bitmap, 00null);    
  94.         // 画间隔矩形      
  95.         Paint deafalutPaint new Paint();    
  96.         canvas.drawRect(0height,width,height reflectionGap,    
  97.                 deafalutPaint);    
  98.         // 画倒影图片      
  99.         canvas.drawBitmap(reflectionImage, 0height reflectionGap, null);    
  100.         // 实现倒影渐变效果      
  101.         Paint paint new Paint();    
  102.         LinearGradient shader new LinearGradient(0   
  103.                 bitmap.getHeight(), 0bitmapWithReflection.getHeight()    
  104.                 reflectionGap, 0x70ffffff0x00ffffffTileMode.CLAMP);    
  105.         paint.setShader(shader);    
  106.             
  107.         // Set the Transfer mode to be porter duff and destination in    
  108.         // 覆盖效果      
  109.         paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));    
  110.         // Draw rectangle using the paint with our linear gradient    
  111.         canvas.drawRect(0height, width, bitmapWithReflection.getHeight()    
  112.                 reflectionGap, paint);    
  113.      
  114.         return bitmapWithReflection;    
  115.        
  116.         
  117. }   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值