• android中图片倒影、圆角效果重绘


    本文用来记录一些Android 操作图片的方法,方便查看。

    1.将Drawable转化为Bitmap

    1. public static Bitmap drawableToBitmap(Drawable drawable){   
    2.  int width = drawable.getIntrinsicWidth();   
    3.  int height = drawable.getIntrinsicHeight();   
    4.  Bitmap bitmap = Bitmap.createBitmap(width, height,   
    5.  drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888   
    6.  : Bitmap.Config.RGB_565);   
    7.  Canvas canvas = new Canvas(bitmap);   
    8.  drawable.setBounds(0,0,width,height);   
    9.  drawable.draw(canvas);   
    10.  return bitmap;   
    11.  }  


    2.获得圆角图片的方法

    1. public static Bitmap getRoundedCornerBitmap(Bitmap bitmap,float roundPx){   
    2.    
    3.  Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap   
    4.  .getHeight(), Config.ARGB_8888);   
    5.  Canvas canvas = new Canvas(output);   
    6.    
    7.  final int color = 0xff424242;   
    8.  final Paint paint = new Paint();   
    9.  final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());   
    10.  final RectF rectF = new RectF(rect);   
    11.    
    12.  paint.setAntiAlias(true);   
    13.  canvas.drawARGB(0, 0, 0, 0);   
    14.  paint.setColor(color);   
    15.  canvas.drawRoundRect(rectF, roundPx, roundPx, paint);   
    16.    
    17.  paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));   
    18.  canvas.drawBitmap(bitmap, rect, rect, paint);   
    19.    
    20.  return output;   
    21.  }  


    3.获得带倒影的图片方法

      1. public static Bitmap createReflectionImageWithOrigin(Bitmap bitmap){   
      2. final int reflectionGap = 4;   
      3. int width = bitmap.getWidth();   
      4. int height = bitmap.getHeight();   
      5.   
      6. Matrix matrix = new Matrix();   
      7. matrix.preScale(1, -1);   
      8.   
      9. Bitmap reflectionImage = Bitmap.createBitmap(bitmap,   
      10. , height/2, width, height/2, matrix, false);   
      11.   
      12. Bitmap bitmapWithReflection = Bitmap.createBitmap(width, (height + height/2), Config.ARGB_8888);   
      13.   
      14. Canvas canvas = new Canvas(bitmapWithReflection);   
      15. canvas.drawBitmap(bitmap, 0, 0, null);   
      16. Paint deafalutPaint = new Paint();   
      17. canvas.drawRect(0, height,width,height + reflectionGap,   
      18. deafalutPaint);   
      19.   
      20. canvas.drawBitmap(reflectionImage, 0, height + reflectionGap, null);   
      21.   
      22. Paint paint = new Paint();   
      23. LinearGradient shader = new LinearGradient(0,   
      24. bitmap.getHeight(), 0, bitmapWithReflection.getHeight()   
      25. + reflectionGap, 0x70ffffff, 0x00ffffff, TileMode.CLAMP);   
      26. paint.setShader(shader); //important  
      27. paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));   
      28. canvas.drawRect(0, height, width, bitmapWithReflection.getHeight()   
      29. + reflectionGap, paint);   
      30. return bitmapWithReflection;   
  • 相关阅读:
    批量修改mp3文件播放速度
    尝试了一下alsa录音播放的编程。
    最快速获取天气的方法
    乒乓Buffer
    GCC编译选项和环境变量
    Linux发行版本
    memcpy 和 memmove
    自动定位android ndk的路径
    记一下,安装和使用Ubuntu过程中遇到的问题
    Android API 和Android 版本对照
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/6721784.html
Copyright © 2020-2023  润新知