Java Android尝试在位图上放置一个10 * 10网格,以查看每个网格部分中有多少颜色

时间:2015-04-02 11:49:08

标签: java android

描述我的问题我必须首先讨论我想要做的事情,http://i.imgur.com/rcHwze5.png这里是一张10 * 10网格的字母图像。对于网格中的每个框,如果1/3的像素被着色,则将1添加到ArrayList,否则添加0。这是我为此创建的3个方法:https://gist.github.com/VincentMc/7ddf3c282e80bbff7835 BoundBM是一个位图对象,其上绘有字母。

以下是我想要的输出http://i.imgur.com/B0QnUW8.png

的图像

以下是我的实际输出http://i.imgur.com/WgRVXLv.png

的图像

似乎一旦在行上添加1,它会不断添加,直到到达下一行,但我似乎无法理解为什么?

任何帮助都将非常感谢我已经有一段时间了,谢谢!

2 个答案:

答案 0 :(得分:1)

分两步完成:

1:对每个字符串进行排序:

public String sortString(String s1){
    char[] chars = s1.toCharArray();
    Arrays.sort(chars);
    String sorted = new String(chars);
    return sorted;   
}

2:将每个字符串放入数组中并使用:

Arrays.sort(stringArray);

答案 1 :(得分:0)

在你提供的Code-Segmet中,我看不出明显的错误。但你的设计是在招致错误。为避免这些,您可以尝试:

不要将count用作类范围变量,因为它与孔类无关,但仅与方法有关。所以把它作为一个返回语句,你不要放松对它的控制,它可以在任何地方设置或只在方法中本地更改。

不应在每个countPixel()方法调用中计算

totalp,因为它是BoundBM的固定值。可能在构造函数中初始化它,或者加载位图。

最后,你知道你的输出数组应该有多大,对我来说,保持列表并添加它对我来说没有多大意义。创建一个2D数组,并直接编写它。

希望它会有所帮助 reineke

编辑:发现了错误! 在代码行27中你将x设置为0而不是输入x的初始值,所以你继续在错误的位置!!

以下是我要做的事情:

final int GRID=10;  
totalp = boundBM.getWidth()/GRID * boundBM.getHeight()/GRID;

//this method now does not need to read boundBM, so it is more opject-oriented
public int countPixels(int x, int y, int h, int w){
    count = 0;
    for (i=x; i<x+w; i++){
        for(k =y; k<y+h; k++){
            if(c != boundBM.getPixel(i, k)) count++;
        }
    }
    //funny thing
    return (count>totalp/3) ? 1 : 0;
}

public void createNeuralInput(){
    int h = boundBM.getHeight()/GRID;
    int w = boundBM.getWidth()/GRID;
    int[][] array= new int[GRID][GRID];
    for(int i = 0; i < GRID; i++) {
        for(int j = 0; j < GRID ; j++) {
            n1.add(countPixels(i*h, j*w, h, w));
            //i would prefer:
            //array[i][j]=countPixels(i*h, j*w);
        }
    }
}