gpt4 book ai didi

java - 在 java 中查找 RGB 的按位版本

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:17:45 24 4
gpt4 key购买 nike

我有以下方法获取 rgb 值并使用较小的调色板对其进行分类:

private static int roundToNearestColor( int rgb, int nrColors )
{
int red = ( rgb >> 16 ) & 0xFF;
int green = ( rgb >> 8 ) & 0xFF;
int blue = ( rgb & 0xFF );
red = red - ( red % nrColors );
green = green - ( green % nrColors );
blue = blue - ( blue % nrColors );
return 0xFF000000 | ( red << 16 ) | ( green << 8 ) | ( blue );
}

让我烦恼的代码是

red = red - ( red % nrColors );
green = green - ( green % nrColors );
blue = blue - ( blue % nrColors );

我确信它还有一个执行速度更快的替代按位版本,但由于我的按位算法有点生疏,我很难找到这样的表达式。如有任何帮助或意见,我们将不胜感激。

最佳答案

如果 nrColors 总是 2 的幂:

private static int roundToNearestColor( int rgb, int nrColors )
{
if (Integer.bitCount(nrColors) != 1) {
throw new IllegalArgumentException("nrColors must be a power of two");
}
int mask = 0xFF & (-1 << Integer.numberOfTrailingZeros(nrColors));
int red = ( rgb >> 16 ) & mask;
int green = ( rgb >> 8 ) & mask;
int blue = ( rgb & mask );
return 0xFF000000 | ( red << 16 ) | ( green << 8 ) | ( blue );
}

关于java - 在 java 中查找 RGB 的按位版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4783529/

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