【发布时间】:2017-01-06 03:43:13
【问题描述】:
我需要更改存储在 SDCard 中的 PNG 的特定颜色。我不能在位图或任何其他对象上使用 tintcolor,因为这会使所有图像着色而不是特定的像素颜色。
为什么我需要这样做?
我正在尝试开发一个头像应用程序,我希望能够使用我从调色板中选择的任何颜色来更改头像的头发。这头发有两种颜色,一种用于边缘,另一种用于其余头发。我只想改变空气颜色并保留边框。
这是一个简单的例子,但图像中可能有不止一种颜色。
我正在寻找解决方案。这是我发现的唯一东西(可能还有更多,但我不走运):
Android Bitmap: Convert transparent pixels to a color
这就是它在那里暴露的内容:
Bitmap b = ...;
for(int x = 0; x<b.getWidth(); x++){
for(int y = 0; y<b.getHeight(); y++){
if(b.getPixel(x, y) == Color.TRANSPARENT){
b.setPixel(x, y, Color.WHITE);
}
}
}
我想知道是否有更好的方法来做到这一点。有点像:
bipmapImage.changeColor(originalColor, newColor);
我不知道使用循环来检查像素是否是一个很好的表现。想象一下 1080 x 1080 的图像。
提前致谢。
【问题讨论】:
-
您是否使用透明度来指示哪些像素是头发?
-
您最好使用 OpenCV Matrix API,尤其是在性能(和紧凑性)方面。
-
@samgak 我没有使用透明度,因为我可以在同一张图像中更改多种颜色。
-
@SuhyeonLee,你有例子吗?请
-
在您确定使用该示例的性能不佳之前,您应该像这样实现它并测量所花费的时间。
标签: android performance colors bitmap pixels