У меня есть android приложение, встроенное в java, которое преобразует растровое изображение в двоичное (с добавлением некоторых двоичных заголовков).
Я хотел бы преобразовать этот класс в java родное приложение (чтобы запустить его на моем рабочем столе или в лямбда-функции) хорошая альтернатива для java -одного, я пытался использовать ImageJ, но я столкнулся со следующей проблемой:
Приложение android получает изображение bmp; все работает хорошо
Нормальное приложение java получает такое же изображение bmp ; Я всегда получаю ошибку ArrayOutOfBounds для переменной int iArr
. Мне не нужно было увеличивать размер int[]
, и я не могу понять, почему размер отличается.
Я попытался увеличить размер, но затем двоичные заголовки и разделители добавились к двоичное изображение не в той же позиции, и двоичное изображение повреждено.
Android код:
import android.graphics.Bitmap;
class BmpUtil {
public byte[] saveRGB(BufferedImage bitmap, String str) throws IOException {
int width = bitmap.getWidth();
int height = bitmap.getHeight();
int[] iArr = new int[(width * height)];
int length = iArr.length * 3;
bitmap.getPixels(iArr, 0, width, 0, 0, width, height);
ByteBuffer allocate = ByteBuffer.allocate(length);
//..
}
}
Мой код:
import java.awt.image.BufferedImage;
class BmpUtil {
public byte[] saveRGB(BufferedImage bitmap, String str) throws IOException {
int width = bitmap.getWidth();
int height = bitmap.getHeight();
int[] iArr = new int[(width * height)];
int length = iArr.length * 3;
bitmap.getRaster().getPixels(0, 0, width, height, iArr);
//bitmap.getData().getPixels(0, 0, width, height, iArr);
ByteBuffer allocate = ByteBuffer.allocate(length);
//..
}
}
Есть Есть ли способ получить подобную функцию, возвращающую пиксели в java нормально? Я использую правильный класс?
Заранее спасибо!