кто-нибудь может сказать мне, если copyPixelsFromBuffer должен работать с нарезанным буфером?
Когда я делаю это, у меня возникает треск с этим кодом: фатальный сигнал 11 (SIGSEGV), код 1 (SEGV_MAPERR), ошибка addr 0xbfc8019 c в tid 19021
Поскольку моя позиция равна 0, а мой arrayOffset, если он отличается от 0, я полагаю, что эта функция пыталась получить доступ к индексу 0, не считая значение arrayOffset из среза. Если создать новый массив и обернуть его в новый byteBuffer, он будет работать.
Это не работает:
Buffer buffer = something coming from ByteBuffer.slice();
bitmap = Bitmap.createBitmap(getWidth(), getHeight(), bitmapConfig);
bitmap.copyPixelsFromBuffer(buffer);
Это работает:
Buffer buffer = something coming from ByteBuffer.slice();
byte[] bytes_wrong_size = buffer.array();
byte[] bytes_good_size = Arrays.copyOfRange(bytes_wrong_size, buffer.arrayOffset(), buffer.arrayOffset() + buffer.capacity());
bitmap = Bitmap.createBitmap(getWidth(), getHeight(), bitmapConfig);
bitmap.copyPixelsFromBuffer(byteBuffer.wrap(bytes_good_size));
второй работает, но переутомление и чрезмерное использование памяти. Есть ли другой способ создать растровое изображение из нарезанного byteBuffer?
Спасибо