如何在Android上使用PNG图像将多边形(由一组点指定)设置为透明?
答案 0 :(得分:2)
为了实现这一目标,您必须首先从BitmapFactory
获取对资源的引用:
Bitmap my_image = BitmapFactory.decodeResource(getResources(), R.drawable.[your_image]);
然后,您必须使用setPixels()
方法在PNG上定义要透明的区域。我相信透明度是通过将像素Color
设置为0来实现的。
派生多边形将是您在应用程序中必须进行的一些计算,然后将多边形的尺寸传递到setPixels()
方法。有关如何使用setPixels()
方法的建议,请参阅Android开发人员文档中的this link。
请注意,这假设您的PNG文件可变。否则你将获得IllegalStateException
。
这是您的问题变得更具挑战性的地方。由于您不能使用传统的区域公式(因为该区域与此示例无关,而是与顶点所在的位置无关),您必须找到一种方法来计算必须自己透明的区域。
我可以想到这样做的一种方法是测试用户绘制线的一部分下方的所有像素,并将它们标记为透明直到满足交叉点,并重复此操作直到达到图像的底部。请参阅此图以供参考:
这里的ΔX是任意定义的像素长度,可以增加以提高精度,或者减小以提高性能。推导出这种透明度的过程如下:
Y
方法中getPixel()
的值,直到您与另一个用户绘制的顶点发生碰撞,在使用setPixel()
时将像素更改为透明并传递你当前的坐标; 请注意,在设置透明度和不设置透明度之间切换是很重要的(您可以使用boolean
来维持状态),因为多边形可以“弯曲”并返回到您要解析的列。