我正在尝试创建一个函数,该函数获取位图和目标颜色,并返回着色的位图(不使用绘画)。 我找到了几种方法来实现它,但没有一种方法能够像我想要的那样正常工作。
我能找到的最接近的解决方案是:
public static Bitmap changeImageColor(Bitmap srcBmp, int dstColor) {
int width = srcBmp.getWidth();
int height = srcBmp.getHeight();
float srcHSV[] = new float[3];
float dstHSV[] = new float[3];
Bitmap dstBitmap = Bitmap.createBitmap(width, height, Config.RGB_565);
for (int row = 0; row < height; row++) {
for (int col = 0; col < width; col++) {
Color.colorToHSV(srcBmp.getPixel(col, row), srcHSV);
Color.colorToHSV(dstColor, dstHSV);
// If it area to be painted set only value of original image
dstHSV[2] = srcHSV[2]; // value
int color2=Color.HSVToColor(dstHSV);;
dstBitmap.setPixel(col, row, Color.HSVToColor(dstHSV));
}
}
return dstBitmap;
}
但是在透明图片上它的效果并不太好,如下所示(之前和之后): 有没有其他解决方案(不再使用画图工具)?
yourImageView.setColorFilter(yourColor, PorterDuff.Mode.MULTIPLY);
。 - Phantômaxx