Android GLSurface Просмотреть несколько изображений в действии
Я пытаюсь сделать фотоколлаж из 9 изображений (3х3) и применить к ним разные эффекты.
В настоящее время я пытаюсь редактировать этот демонстрационный проект:
https://github.com/Grishu/ImageEffects
Но я не знаю, как установить 9 изображений на экране. Когда я устанавливаю несколько GLSurfaceViews в Layout, ошибка показывает:
03-26 11:26:21.315 6237-6237/com.test.effectsfilter_demo E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.test.effectsfilter_demo, PID: 6237
java.lang.NullPointerException
Любая помощь, пожалуйста?
PS Есть ли другой способ сделать эффект Duotone?
1 ответ
Прежде всего, не создавайте несколько экземпляров GLSurfaceView. Каждый экземпляр SurfaceView состоит из двух частей: Surface и View. Создание девяти родственных видов - это нормально, но каждая поверхность представляет собой отдельный графический слой, составленный системой, и иметь девять из них будет неэффективно. В конечном итоге система будет использовать GLES для создания композиции, так что вам лучше (для эффективности, а также гибкости и, возможно, простоты) делать композицию самостоятельно.
Я не знаю, почему вы получаете именно эту ошибку. Вам нужно будет взглянуть на строку кода, которая выдает исключение. Если сообщение в вашем вопросе - это все, что вы получаете, тогда что-то фильтрует исключение, и вам нужно присоединить отладчик и сломать его в NPE.
В любом случае, вы хотите нарисовать все девять изображений в одном GLSurfaceView. Быстро взглянем на демонстрационный код (который выглядит красиво структурированным), функцию computeOutputVertices()
в TextureRenderer.java устанавливается позиция и размер вывода. Измените это, чтобы расположить каждую из девяти текстур там, где вы хотите их разместить, и измените renderTexture()
работать в цикле.
Смотрите также эту демонстрацию для другого способа фильтрации изображений.