2010-09-09 136 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]; 
    } 
    

問題是當我嘗試保存圖像與亮度。其實它是保存以前的形象,即圖像W/O亮度

任何人都可以幫助我,如何使用渲染緩衝區保存圖像?

感謝,

薩加爾

回答

0

你只是做在屏幕上的工作,可以這麼說。你實際上並沒有閱讀屏幕並將這些數據保存到文件中。基本上你需要使用glReadPixels從屏幕緩衝區獲取數據,然後將該緩衝區保存爲修改後的圖像。有更多的細節如下:

How do I grab an image from my EAGLLayer ?

+0

謝謝,它保存了渲染的內容。其實我是OpenGL的新手,所以慢慢來。我現在正在收到「GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES」錯誤。 – 2010-09-10 07:33:10