2013-05-18 4 views
5

私の状況では私はRenderSurfaceViewを使用していません。私は自分のシーンのスクリーンキャプチャをしたい。 しかし、スクリーンショットを保存すると、鏡像が上下逆さまに表示されます。ここで何が間違っているのか理解できません。ここでandengineのスクリーンキャプチャは逆さまの鏡像を与えます

は私のコード

attachChild(screenCapture); 

        share_clicked = 1; 

        final int viewWidth = (int)camera.getWidth(); 
        final int viewHeight = (int)camera.getHeight(); 

        Log.d("camera width", "View width :" + viewWidth); 
        Log.d("camera height", "View height :" + viewHeight); 


        File direct = new File(
          Environment.getExternalStorageDirectory() 
            + "/Word"); 

        if (!direct.exists()) { 
         if (direct.mkdir()) 
          ; // directory is created; 

        } 

        screenCapture.capture(
          viewWidth, 
          viewHeight, 
          direct.getAbsolutePath() + "/word" 
            + System.currentTimeMillis() + ".png", 

          new IScreenCaptureCallback() { 

           public void onScreenCaptured(
             final String pFilePath) { 
            activity 
              .runOnUiThread(new Runnable() { 

               public void run() { 
                Toast.makeText(
                  activity, 
                  "Image Successfully saved to 'Word' folder in SD Card.", 
                  Toast.LENGTH_SHORT) 
                  .show(); 
               } 
              }); 

           } 

           public void onScreenCaptureFailed(
             final String pFilePath, 
             final Exception pException) { 


            activity.runOnUiThread(new Runnable() { 

               public void run() { 
                Toast.makeText(
                  activity, 
                  "Failed saving the image! Please check SD card.", 
                  Toast.LENGTH_SHORT) 
                  .show(); 
               } 
              }); 
           } 
          }); 

です![これは私が誰も私のためにこれを探し出さことができれば、それは大きな助けになり1

を取得するスクリーンショットです。おかげさまで このようなもののために

答えて

3

更新GLES2-AnchorCenter

AndEngine/SRC/ORG/andengine /エンティティ/ ScreenGrabber.java

/utilに
private static Bitmap grab(final int pGrabX, final int pGrabY, final int pGrabWidth, final int pGrabHeight) { 
    final int[] pixelsRGBA_8888 = new int[pGrabWidth * pGrabHeight]; 
    final IntBuffer pixelsRGBA_8888_Buffer = IntBuffer.wrap(pixelsRGBA_8888); 

    // TODO Check availability of OpenGL and GLES20.GL_RGBA combinations that require less conversion operations. 
    GLES20.glReadPixels(pGrabX, pGrabY, pGrabWidth, pGrabHeight, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, pixelsRGBA_8888_Buffer); 

    /* Convert from RGBA_8888 (Which is actually ABGR as the whole buffer seems to be inverted) --> ARGB_8888. */ 
    final int[] pixelsARGB_8888 = GLHelper.convertRGBA_8888toARGB_8888(pixelsRGBA_8888); 

    final int[] pixels = new int[pGrabWidth * pGrabHeight]; 

    for (int y = 0; y < pGrabHeight; y++) { 
     for (int x = 0; x < pGrabWidth; x++) { 
      pixels[x + ((pGrabHeight - y - 1) * pGrabWidth)] = pixelsARGB_8888[x + ((pGrabY + y) * pGrabWidth)]; 
     } 
    } 

    return Bitmap.createBitmap(pixels, pGrabWidth, pGrabHeight, Config.ARGB_8888); 
} 
+0

感謝。 – Siddharth

+1

実際にはエラーがあり、pGrabYが0以外の場合はArrayOutOFBoundsExceptionが返されます。その行は、代入の2番目の部分にpGrabYを含まず、 'pixels [x +(pGrabHeight - y - 1)* pGrabWidth] = pixelsARGB_8888 [x + y * pGrabWidth]; – Orgmir

関連する問題