我的目标是使特定颜色在图像上透明,就像在瓷砖中一样,在加载时忽略一个普通背景颜色的游戏。
我读过的
我添加的代码默认为.java
ImageView log = (ImageView) findViewById(R.id.iconLogo);
int col = ResourcesCompat.getColor(getResources(), R.color.colorTrans, null);
log.getDrawable().mutate().setColorFilter(col, PorterDuff.Mode.SRC_IN);
//log.getDrawable().setColorFilter(col, PorterDuff.Mode.SRC_IN); //take2
//log.setColorFilter(R.color.colorTrans, PorterDuff.Mode.SRC_IN); //take3
使图像可变提供更好的结果,但仍然不从图像中减去R.color.colorTrans
。总体而言,在使用过滤器后,它似乎在整个图像上方作为过滤器工作,并且没有搜索我设置的颜色,因此颜色始终存在并且不排除不依赖于所使用的模式。
第二种选择
public static Bitmap getBitmapWithTransparentBG(Bitmap srcBitmap, int BgColor) {
Bitmap result = srcBitmap.copy(Bitmap.Config.ARGB_8888, true);
int nWidth = result.getWidth();
int nHeight = result.getHeight();
for (int y = 0; y < nHeight; ++y)
for (int x = 0; x < nWidth; ++x) {
int nPixelColor = result.getPixel(x, y);
if (nPixelColor == BgColor)
result.setPixel(x, y, Color.TRANSPARENT);
}
return result;
}
仅使用一个600x600 px png文件可将应用程序加载时间从1-2秒增加到8-12秒,而且不会删除特定颜色。因此不能用于多个igames。
我需要的是从ImageView中的Image中删除/忽略特定颜色,但不要使所有图片透明。由于游戏使用没有alpha的平铺地图,因此必须有一种方法可以在不添加alpha遮罩的情况下进行。
解决方案在这里unable to transparent pixels of a bitmap image 。
然而,即使在一张照片上使用它也会大大增加加载时间。可能具有已经清除背景的.png
将更好地使用。