2010-09-09 3 views
0

В моем приложении мне нужно выполнить операцию, связанную с яркостью изображения. Я сделал следующие вещиOpen GL + Яркость изображения + сохранение изображения

  1. Получение изображения из библиотеки фотографий.
  2. Рисование этого изображения с использованием Open GL.
  3. Изменение яркости изображения.

    -(void) DoBrightness:(float) aBrightness 
    { 
    [EAGLContext setCurrentContext:context]; 
    
        // Clear the buffer 
    
        glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer); 
        glClearColor(0.0, 0.0, 0.0, 0.0); 
        glActiveTexture(GL_TEXTURE0); 
        glVertexPointer(2, GL_FLOAT, 0, spriteVertices); 
        glEnableClientState(GL_VERTEX_ARRAY); 
        glTexCoordPointer(2, GL_SHORT, 0, spriteTexcoords); 
        glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); 
    
        if (aBrightness >= 1.0f) { 
         glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_ADD); 
         glColor4f(aBrightness-1, aBrightness-1, aBrightness-1, aBrightness-1); 
        } else { 
         glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_SUBTRACT); 
         glColor4f(1-aBrightness, 1-aBrightness, 1-aBrightness, 1-aBrightness); 
        } 
        glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_TEXTURE); 
        glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_PRIMARY_COLOR); 
        glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE); 
        glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_TEXTURE); 
    
        glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 
    
        // Display the buffer 
        glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer); 
        [context presentRenderbuffer:GL_RENDERBUFFER_OES]; 
    } 
    

Проблема возникает, когда я пытаюсь сохранить изображение с яркостью. На самом деле это сохранение предыдущего изображения. I.e изображение без яркости

Может ли кто-нибудь мне помочь, как сохранить изображение с помощью визуализированного буфера?

спасибо,

Сагар

ответ

0

Вы только делаете работу на экране, так сказать. Вы фактически не читаете экран и не сохраняете эти данные в файл. В основном вам нужно использовать glReadPixels для получения данных из экранного буфера, а затем сохранить этот буфер в качестве вашего измененного изображения. Там более подробно в следующем:

How do I grab an image from my EAGLLayer ?

+0

Спасибо, это спасло отображаемое содержимое. На самом деле я новичок для OpenGL, так что медленно. Я получаю сообщение об ошибке «GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES». –

Смежные вопросы