Android — SurfaceTexture / Отображение поверхности с помощью ANativeWindow

На основании GraphicBufferProducer я создаю поверхность, а затем извлекаю ANativeWindow. Используя ANativeWindow_lock, я получаю указатель на буфер. Используя буфер, я делаю memcpy в буфер. Проблема в том, что все, что я рисую в этом буфере, ограничено менее чем 25% экрана. Имейте в виду, что размеры buffer.width и buffer.height очень близки к разрешению самого экрана.

У меня вопрос, почему буфер покрывает только небольшую часть экрана? И как мне убедиться, что он покрывает большинство, если не весь экран? Для справки вот код:

ANativeWindow_Buffer buffer;
// window is created from a "new Surface(sp<IGraphicBufferProducer>)"if (ANativeWindow_lock(window, &buffer, NULL) == 0) {
// For testing purposes just put grey in the buffer
memcpy(buffer.bits, 0x99,  buffer.width * buffer.height);
ANativeWindow_unlockAndPost(window);
}

0

Решение

У меня есть предположение, хотя я никогда не использовал ANativeWindow_Buffer. memcpy копирует определенное количество байтов. Сколько бит на пиксель у вашего изображения? Если значение больше 8, вы не передаете полный буфер. Поскольку его, вероятно, 4 байта на пиксель (AARRGGBB), вам, вероятно, нужно умножить это на 4.

1

Другие решения


По вопросам рекламы [email protected]