gpt4 book ai didi

安卓色彩飞溅

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:50:38 25 4
gpt4 key购买 nike

有人可以向我推荐一种快速的颜色飞溅效果方法或库吗?例如,我选择了一种颜色,照片中除了我选择的颜色之外的所有颜色都会去饱和。

我试过使用逐像素颜色检查然后替换颜色,但对于大图像来说太慢了。

int width = originalImage.getWidth();
int height = originalImage.getHeight();
int[] pixels = new int[width * height];
originalImage.getPixels(pixels, 0, width, 0, 0, width, height);

for (int x = 0; x < pixels.length; ++x) {
pixels[x] = Distance(pixels[x], fromColor) < 4 ? targetColor : pixels[x];
}

Bitmap newImage = Bitmap.createBitmap(width, height, originalImage.getConfig());
newImage.setPixels(pixels, 0, width, 0, 0, width, height);


public int Distance(int a, int b) {
return Math.abs(Color.red(a) - Color.red(b)) + Math.abs(Color.green(a) -
Color.green(b)) + Math.abs(Color.blue(a) - Color.blue(b));
}

编辑:

这是原始图像和处理后的图像,我保留的颜色是#ff9350: enter image description here enter image description here

最佳答案

您可以尝试遍历可能的颜色 RGB 值并准备仅包含那些不应包含的颜色值的HashSet去饱和。好像应该不会有很多值吧。

之后您将能够检查颜色是否应该去饱和。因此,对于新的给定颜色,您需要进行相当长的预计算,但转换照片的代码会变得更快。

它可以这样实现(还没有在Android下测试过,只是一些Java伪代码来展示这个想法):

// precalculation
Set<Color> keptColors = new HashSet<Color>();
final int MAX_DISTANCE = 4;
for (int r=red(fromColor)-MAX_DISTANCE; r<=red(fromColor)+MAX_DISTANCE; r++) {
for (int g=green(fromColor)-MAX_DISTANCE; g<=green(fromColor)+MAX_DISTANCE; g++) {
for (int b=blue(fromColor)-MAX_DISTANCE; b<=blue(fromColor)+MAX_DISTANCE; b++) {
if (Distance(rgb(r,g,b)), fromColor) < MAX_DISTANCE {
keptColors.add(rgb(r,g,b));
}
}
}
}
...

// in you photo processing code
keptColors.contains(pixels[x]) ? pixels[x] : targetColor;

关于安卓色彩飞溅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49549808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com