Android Bitmap着色

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android Bitmap着色相关的知识,希望对你有一定的参考价值。

参考技术A android 5.0 以上 ImageView 有支持着色的api:

缺点:
1、只有5.0及以上的设备才支持
2、只能着纯色,不能着渐变色

效果:(第一个为原图)

附录:
Shader类源码简析:
Shader类中定义了一个 枚举: enum TileModeCLAMP, REPEAT, MIRROR; 定义了三种渲染图形的模式。
注: 如果图片和目标区域一样大,设置任意模式的效果是一样的。
1. CLAMP: 如果图片小于目标区域,则用该图片的边缘颜色继续填充剩余空间。
2. REPEAT(重复): 如果图片小于目标区域,则复制该图片继续填充剩余空间。
3. MIRROR(镜像): 如果图片小于目标区域,则从图片边缘按和图片上原本颜色相反的颜色来填充剩余空间。
Shader子类解释:Shader的子类全部都没有自己定义的方法,纯粹靠各自的 构造方法 实现效果,所以下面的描述基本只注重于构造方法。所有的Shader子类的使用方法都一样: 给自己的Paint设置这个属性(mPaint.setShader(XXXX)),传入自己建立的Shader,然后使用Canvas画出来即可。 注:为了观察清晰起见,我画出的图片和目标区域是一样大的,也就不存在渲染模式的问题了,故渲染模式都采用CLAMP。

附录原文链接: https://blog.csdn.net/ShortChin/article/details/51655082

Android 根据目标宽度,将bitmap等比缩放。

/**
  * author:  stone
  * email:   aa86799@163.com
  * 
  * 根据目标宽度,将bitmap等比缩放。
  * dstWidth 确定的 目标宽度
  */
 fun calculateBitmap(bitmap: Bitmap, dstWidth: Float): Bitmap 
     val width = bitmap.width
     val height = bitmap.height
     // 如果得到的宽或者高是0 返回原对象
     if (width == 0 || height == 0) return bitmap
     // h/w = h'/w'  => h' = h/w * w'
     val dstHeight = height * dstWidth / width
     return ThumbnailUtils.extractThumbnail(bitmap, dstWidth.toInt(), dstHeight.toInt())
 

以上是关于Android Bitmap着色的主要内容,如果未能解决你的问题,请参考以下文章

Android Bitmap理解

Android 根据目标宽度,将bitmap等比缩放。

Android面试收集录15 Android Bitmap压缩策略

Android6.0 Bitmap存储以及Parcel传输

Android Bitmap

Android开发中ImageView里的Bitmap很模糊,怎么解决?