На основании 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);
}
У меня есть предположение, хотя я никогда не использовал ANativeWindow_Buffer. memcpy копирует определенное количество байтов. Сколько бит на пиксель у вашего изображения? Если значение больше 8, вы не передаете полный буфер. Поскольку его, вероятно, 4 байта на пиксель (AARRGGBB), вам, вероятно, нужно умножить это на 4.