1

in2.getImagesOneDim()画像のピクセル値をより正確に言うと、整数の配列を取得するメソッドがあります。次に、すべての画像のすべてのピクセル値を使用して1つの大きな配列を作成します。したがって、このメソッドを数回呼び出す必要があります。ここで、すべての画像が読み取られるまで、前の出力を現在の出力に連結したいと思います。

ある種の擬似コードでは、+は連結です...:

 for (int i = 1; i < 25; i++) {
  ConArray = ConArray + in2.getImagesOneDim("../images/"+i);
 }

Javaでこれを行うにはどうすればよいですか?

4

3 に答える 3

1

大きな問題を多くの小さな問題に分割すると、次の方法が見つかります。

  1. 各画像を別々の配列に読み込みます
  2. 合計サイズを計算する
  3. サブ配列を結合する

例を見る

import java.util.Arrays;

public class ImageProgram {

    public static void main(String[] args) {
        System.out.println(Arrays.toString(new ImageReader().readImages()));
    }
}

class ImageReader {

    public int[] readImages() {
        int[][] images = readImagesInto2DArray();
        return makeOneDimensionArray(images);
    }

    private int[] makeOneDimensionArray(int[][] arrays) {
        int totalLength = computeTotalLength(arrays);
        int[] array = new int[totalLength];
        int destPos = 0;
        for (int[] subArray : arrays) {
            System.arraycopy(subArray, 0, array, destPos, subArray.length);
            destPos += subArray.length;
        }
        return array;
    }

    private int computeTotalLength(int[][] arrays) {
        int length = 0;
        for (int[] subArray : arrays) {
            length += subArray.length;
        }
        return length;
    }

    private int[][] readImagesInto2DArray() {
        int size = 24;
        int[][] result = new int[size][];
        for (int i = 0; i < size; i++) {
            result[i] = readArray(i + 1);
        }
        return result;
    }

    private int[] readArray(int index) {
        // read from file
        int[] result = new int[index];
        Arrays.fill(result, index);
        return result;
    }
}
于 2012-11-18T11:34:44.987 に答える
0
List<int[]> pixels = new ArrayList<int[]>();
for (int i = 1; i < 25; i++) {
    pixels.add(in2.getImagesOneDim("../images/"+i));
}
return pixels;

これですべてのデータのリストができました。次のデータを取得できます。pixels.get(index);

于 2012-11-18T10:51:27.763 に答える
0

この方法を使用できますCollections#addAll

List<Integer> allIntegers = new ArrayList<Integer>();

for (int i = 1; i < 25; i++) {
    Integer[] imageIntegers = in2.getImagesOneDim("../images/"+i);
    allIntegers.addAll(Arrays.asList(imageIntegers));
}

return allIntegers.toArray();
于 2012-11-18T11:20:39.003 に答える