getPixelsで得られる画素値の順番はZ字順ではないらしい

MATLABで得られる結果と同じにしたくて,いろいろやってる.まず表題の件について.

(3)RGB形式のピクセルデータをまとめて取得するメソッド
 整数型配列変数=Graphics型変数.getRGBPixels(x, y, width, height, pixels, off);
 で、ピクセルデータを決まった書式まとめて取得できます。なお、最初の整数型変数は省略可能です。

 ここで、
    x:   整数型で、画面左からのピクセル数を表します。
    y:   整数型で、画面上端からのピクセル数を表します。
    width: 整数型で、ピクセルを取得する幅
    height:整数型で、ピクセルを取得する高さ
    pixels::整数型の配列で、取得したピクセルデータを格納する整数型の配列変数
    off:  整数型で、取得したピクセルデータをどこから格納するか指します。
 戻り値は整数型変数で、格納されたピクセルデータの格納先(すなわち、pixels)が返されますが、省略可能です。
 なお、色の形式、(2)と同じです。

 以下の例は
  (preCurX,preCurY)を基点に、幅、高さともCUR_SIZEのピクセルデータを取得し、pixels[0]より順次格納して行きます。
 可能の順番は、右上、その左隣・・・・です。

   g.getPixels(preCurX,preCurY,CUR_SIZE,CUR_SIZE,pixels,0);

http://www.geocities.jp/inu_poti/makeiapp/image/pixel3.htm

また,MATLABのimwriteについて.

imwrite(A,filename,fmt) は、A のイメージをfmtで指定したフォーマットで、 filename に書き込みます。A は、グレースケールイメージ(M 行 N 列)、または、トゥルーカラーイメージ(M*N*3)のどちらかです。A が、uint8、または、uint16 の場合、 imwrite は、配列の中の実際の値をファイルに書き込みます。A が、クラスdouble の場合、imwrite は、uint8(round(255*A)) を使って、書き込む前に、配列の中の値を再スケーリングします。この演算は、[0,1] のレンジの中の浮動小数点数を[0,255] の範囲の8ビット整数に変換します。

http://dl.cybernet.co.jp/matlab/support/manual/r13/toolbox/matlab/ref/?/matlab/support/manual/r13/toolbox/matlab/ref/imwrite.shtml

これと対応するためにMath.round()を使っても,uint8()の制限がかからないため無駄だった.よって自作した.

/**
 * d が double 型の [0.0 0.1] 区間内にあるものとし,
 * int 型の [0 255] 区間内に変換する
 * @param d 丸めたい値
 * @return [0 255] 区間内へ丸めた値
 */
private int rounduint8(double d) {
	if (d < 0.0) {
		return 0;
	} else {
		d *= 255.0;
		if (d > 255.0) {
			return 255;
		} else {
			return (int) Math.round(d);
		}
	}
}

この後に冒頭の問題が表れた.getPixelsでの順番はZを左右反転した順となっているため,期待外れの結果が表れた.手元の環境では,「左右反転後に90度左回転」した画像が出ている.マハラノビス距離で判定していれば問題ないだろうが,今はユークリッド距離でやってんだ.