私はバイト[]配列として格納されている画像を持ち、バイトをディスクの他の場所に書き込む前に画像を垂直に反転します。バイト配列として格納された画像を反転する
イメージバイトは、圧縮されたjp2イメージファイルからのものです。 Flip image stored as a byte[] arrayのようなものを実装してみましたが、アンドロイドで作業していないため、BitmapFactoryにアクセスできません。私はまた、最初にBufferedImageにバイト配列を変換し、それを反転させることを検討しましたが、イメージの高さと幅は現在のコンテキストではわかりません(EDIT:コードを変更して、現在知られている)。
厳密な配列操作でこれを行う方法はありますか?
EDIT:未遂フリップコード
public static byte[] flip(byte[] imageBytes) {
//separate out the sub arrays
byte[] holder = new byte[imageBytes.length];
byte[] subArray = new byte[dimWidth];//dimWidth is the image width, or number of matrix columns
int subCount = 0;
for (int i = 0; i < imageBytes.length; i++) {
subArray[subCount] = imageBytes[i];
subCount++;
if (i% dimWidth == 0) {
subArray = reverse(subArray);
if (i == (dimWidth)) {
holder = subArray;
} else {
holder = concat(holder, subArray);
}
subCount = 0;
subArray = new byte[dimWidth];
}
}
subArray = new byte[dimWidth];
System.arraycopy(imageBytes, imageBytes.length - dimWidth, subArray, 0, subArray.length);
holder = concat(holder, subArray);
imageBytes = holder;
return imageBytes;
}
それでは、わかっていることはありますか? –
@HovercraftFullOfEels厳密に言うと、インターリーブする前に、自分の配列に高位バイトと低位バイトがあります。かなり知られているのは、ピクセルデータ配列と元の圧縮前ヘッダー情報を含むデータ配列です。 – Sarah
"画像の高さと幅は分かっていません"とすると、ピクセルを入れ替える場所を知ることができなくなります(高さと幅が素数で、どちらが大きければ大きいかわかりません)。 –