Android中BitmapShader使用时双色位图颜色分离问题
问题原因分析
出现颜色分离而非预期的双色环绕边框,核心是BitmapShader的采样逻辑和STROKE样式Paint的渲染机制不匹配,具体原因如下:
Shader的映射范围不是Stroke宽度:BitmapShader默认基于你绘制图形的整个边界矩形采样位图,而非仅针对Stroke的21px宽度。比如绘制圆形时,Shader会把双色位图拉伸覆盖整个圆的外接正方形区域,Stroke只是从这个大区域里“切”出边缘的21px部分,自然导致颜色被拉伸分离,无法形成沿边框的双色分布。
STROKE样式的Shader渲染逻辑:当Paint设置为
Paint.Style.STROKE时,Shader并不会沿着Stroke的轮廓方向采样位图,而是仍以整个图形的填充区域作为坐标空间。如果你的双色位图是横向/纵向分色的,会被强制拉伸适配整个图形区域,Stroke部分截取的区域就会出现颜色断裂分离。CLAMP模式的放大拉伸:你使用了
Shader.TileMode.CLAMP,如果双色位图尺寸远小于绘制图形的边界,位图边缘像素会被无限拉伸填充,进一步加剧颜色分离的视觉效果。
内容的提问来源于stack exchange,提问作者i_o
相关产品推荐
相关产品推荐

