将3D spacel划分为相同大小的块

时间:2015-03-10 11:02:27

标签: java if-statement rgb java-3d

我有一个数组,其中包含rgb中的颜色列表。我想要做的是对颜色进行分组,以便在进行哈希映射时,我没有很多条目,其颜色只出现在一个像素中。我决定将颜色空间划分为64个相同大小的区域,并将每种颜色分配给一个bin,然后为每个bin而不是像素计算哈希映射。但是,我不知道如何做到这一点很简单,我的方法如下:

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;
        }  
     ...
    }
}

这个过程繁琐且效率不高。但我不知道另一种方法。

1 个答案:

答案 0 :(得分:3)

对于初学者而言,如果bin变量称为bin1,bin2等,则将bin设为数组。

然后你只需要决定如何设置数组的索引 - 这只是一些数学。对于精确的颜色,您将范围0..255拆分为4(0..63,64..127等)。通过除以64(丢弃余数)得到相同的效果。

所以,所有这些&#39;如果&#39;陈述可以替换为:

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