2016-10-08 17 views
0

..AndroidのOpenGLの私は、このようなコードを書いた

@Override 
public void onDrawFrame(GL10 gl) { 
    /* codes */ 
    saveBitmap(takeScreenshot(gl)); 
} 

これは完璧な作業(スクリーンショットを撮るとSDカードにビットマップを保存)

私はトリガー

としてボタンを使いたいです
Button btn; 
     @Override 
     public void onCreate{ 
      btn.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        saveBitmap(takeScreenshot(currGL10)); 
       } 
      }); 
     } 

     @Override 
     public void onDrawFrame(GL10 gl) { 
      /* codes */ 
      currGL10 = gl; 
     } 

それは..私は、私はこのように使用して失われた何かということを理解できないだけで黒画像を保存するには...ありがとう

+0

回避策:ボタンをクリックすると、onDrawFrame'のBitmapをキャプチャして保存します。 –

+0

私はこれを試しました、それは働いています...私のプログラムは何度もonDrawFrame()を使用し、パフォーマンスの低下を引き起こすため、毎回ビットマップをキャプチャできません..(takeScreenshotはループのネストされています)..ありがとう – Huseyin

+1

チャンス'saveBitmap()'が現在のOpenGLコンテキストを必要とする 'glReadPixels()'呼び出しを行うということです。したがって、レンダリングスレッド以外のスレッドから呼び出すことはできません。説明については、ここを参照してください:http://stackoverflow.com/questions/30094705/glclearcolor-not-working-correct-android-opengl。これは同じユースケースではなく、同じ基本的な問題です。 –

答えて

0
use this code its work fine . 
    @Override 
    public void onDrawFrame(GL10 arg0) { 

     imageBitmap = takeScreenshot(arg0); 

    } 

**take a screenshot of open GlSurfaceView** 

public Bitmap takeScreenshot(GL10 mGL) { 

     final int mWidth = b_width; 
     final int mHeight = b_height; 

     IntBuffer ib = IntBuffer.allocate(mWidth * mHeight); 
     IntBuffer ibt = IntBuffer.allocate(mWidth * mHeight); 
     mGL.glReadPixels(0, 0, mWidth, mHeight, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, ib); 

     // Convert upside down mirror-reversed image to right-side up normal 
     // image. 
     for (int i = 0; i < mHeight; i++) { 
      for (int j = 0; j < mWidth; j++) { 
       ibt.put((mHeight - i - 1) * mWidth + j, ib.get(i * mWidth + j)); 
      } 
     } 

     Bitmap mBitmap = Bitmap.createBitmap(mWidth, mHeight, Bitmap.Config.ARGB_8888); 
     mBitmap.eraseColor(Color.argb(0, 255, 255, 255)); 
     mBitmap.copyPixelsFromBuffer(ibt); 
     return mBitmap; 
    } 
関連する問題