java - 将 3D 空间划分为相同大小的 block

标签 java if-statement rgb java-3d

我有一个数组,其中包含 RGB 颜色列表。我想要做的是将颜色分组,以便在制作 HashMap 时,我不会有很多颜色仅出现在一个像素中的条目。我决定将颜色空间划分为 64 个大小相等的容器,并将每种颜色分配给一个容器,然后对每个容器而不是像素进行 HashMap 计数。但是,我不知道如何做到这一点是一个简单的方法,我的方法如下:

int r = c.getRed();
int b = c.getBlue();
int g = c.getGreen();
//declare all bins as arrays

if (0 = < r =<63) {
    if (0=< g =< 63) {
        if (0=< b =< 63) {
            bin1= push.c;
        if (64 =<b =<126){
            bin2= push.c;
        if (127 =<b =< 190)
            bin3 =push.c;
        }
        if (191 =<b =< 255)
            bin4 = push.c;
        }
    if (64 =<g =<126){
        if (0=< b =< 63) {
            bin5= push.c;
        if (64 =<b =<126){
            bin6= push.c;
        if (127 =<b =< 190)
            bin7 =push.c;
        }
        if (191 =<b =< 255)
            bin8 = push.c;
        }
    if (127 =<g =<190){
        if (0=< b =< 63) {
            bin9= push.c;
        if (64 =<b =<126){
            bin10= push.c;
        if (127 =<b =< 190)
            bin11 =push.c;
        }
        if (191 =<b =< 255)
            bin12 = push.c;
        }
    if (190 =<g =<255){
        if (0=< b =< 63) {
            bin13= push.c;
        if (64 =<b =<126){
            bin14= push.c;
        if (127 =<b =< 190)
            bin15 =push.c;
        }
        if (191 =<b =< 255)
            bin16 = push.c;
        }  
     ...
    }
}

这个过程很乏味而且效率不高。但我不知道另一种方法。

最佳答案

对于初学者来说,如果 bin 变量名为 bin1、bin2 等,则将 bin 设为数组。

然后您只需要决定如何设置数组的索引 - 这只是一些数学知识。为了获得精确的颜色,您可以将范围 0..255 分成 4 个(0..63、64..127 等)。除以 64 可以得到相同的效果(丢弃余数)。

因此,所有这些“if”语句都可以替换为:

int idx = 16 * (r/64) + 4 * (g/64) + (b/64);
bin[idx] = push.c;

关于java - 将 3D 空间划分为相同大小的 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28962020/

相关文章:

java |整数方法 |我需要 ELSE {不返回任何内容}

php - 如何判断一个数组是否有元素?

java - ProfilePictureView 无法转换为 android.widget.ImageView

java - 如果输入了选项之外的内容,如何重复 if 或 switch 语句?

java - 当我使用处理程序时,SetContentView 不起作用

python - skimage.color rgba 转换为 rgb 的图像通过 matplotlib imsave 保存为 rgba

c++ - 十六进制数据 (RGB888) 中的图像文件到 BMP、JPG、PNG 或其他格式

java - GridBagLayout 中的单选按钮为 "Hiding"

python - 无法在循环中更改 bool var 状态

c++ - 着色和调色板最佳拟合算法