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着色的主要内容,如果未能解决你的问题,请参考以下文章