2016-06-12 8 views
0

Я пытаюсь заменить glReadPixels() на вещи EGL, чтобы сделать это быстрее.Только определенная ширина экрана работает при использовании GraphicBuffer (EGL) в Android NDK

Ссылаясь на this post, я успешно сделал это в моем проекте. Мой код почти такой же, как и на этом посту.

Тем не менее, странная вещь: ширина должна быть определенными пикселями, например 384, 640, 720, 1280 и т. Д. Если ширина, которую я установил не среди них, изображение фактически отображается в какая-то другая ширина среди них, поэтому было бы искажено при отображении с помощью cv :: Mat и т. д.

Похоже, система Android делает некоторые ограничения по ширине EGLImage. К сожалению, я не знаком с разработкой Android ...

Как это происходит? Как это исправить?

Заранее спасибо.

ответ

0

В общем, графические буферы системы, выделенные через gralloc, не переносимы; Распределения gralloc предназначены для обработки множества системных спецификаций, таких как использование оптимальных макетов памяти для эффективного использования подсистемами видео/графики/отображения. В некоторых случаях вы даже можете получить действительно инвазивные эффекты, такие как сжатие фреймбуфера.

Если я должен был угадать, это звучит так, как будто вы не факторизуетесь в шаге поверхности, читая изображение в своем приложении.

+0

Спасибо! Ты прав. В GraphicBuffer есть 'getStride()', который сообщает фактическую ширину буфера рендеринга. Просто пропустите прокладку на хвосте каждой строки, тогда все будет хорошо –