Мне нужно получить растровое изображение из IFrameCallback , которое было использовано для обработки фрейма из UVCCamera предварительного просмотра, но есть исключение:
java.lang.UnsupportedOperationException at
java.nio.ByteBuffer.arrayOffset
private final IFrameCallback callback = new IFrameCallback() {
@override
public void onFrame(final ByteBuffer frame) {
new Thread(new Runnable() {
byte[] bytes = new byte[frame.remaining()];
frame.get(bytes);
if(bytes.length > 0) {
int offset = frame.arrayOffset();
Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, offset, bytes.length - offset);
......
}
}).start();
}
}
или если я использую createBitmap вместо decodeByteArray , я получу это исключение:
java.lang.RuntimeException: буфер недостаточно велик для пикселей в
android.graphics.Bitmap.copyPixelsFromBuffer
private final IFrameCallback callback = new IFrameCallback() {
@override
public void onFrame(final ByteBuffer frame) {
new Thread(new Runnable() {
Bitmap bitmap = Bitmap.createBitmap(UVCCamera.DEFAULT_PREVIEW_WIDTH, UVCCamera.DEFAULT_PREVIEW_HEIGHT, Bitmap.Config.ARGB_8888);
bitmap.copyPixelsFromBuffer(frame);
......
}).start();
}
}
Поскольку размер предварительного просмотра составляет 1280 x 720 , проблема RuntimeException может быть проигнорирована.
Есть ли идеи о первом исключении для получения arrayOffset из ByteBuffer ?
PS: я знаю
UnsupportedOperationException - Если этот буфер не поддержан
доступный массив
Моя точка зрения такова: есть ли другие способы получить arrayOffset , или если не можете этого сделать и как решить RuntimeException?