2013-05-18 12 views
5

W mojej sytuacji nie używałem RenderSurfaceView. Chcę zrobić zrzut ekranu mojej sceny. Ale kiedy zapisuję zrzut ekranu, pokazuje odwrócone lustrzane odbicie. Nie rozumiem, co robię źle tutaj.Screen Capture w andengine daje odwrócone lustro obrazu

Oto mój kod

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(); 
               } 
              }); 
           } 
          }); 

! [Jest to zrzut ekranu i dostaje 1

Byłoby to bardzo pomocne, jeśli ktoś może to szukał dla mnie. Dzięki.

Odpowiedz

3

aktualizacja GLES2-AnchorCenter

AndEngine/src/org/AndEngine/jednostka/util/ScreenGrabber.java

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

Dzięki za te rzeczy. – Siddharth

+1

W rzeczywistości wystąpił błąd, jeśli pGrabY jest inny niż 0, generuje wyjątek ArrayOutOFBoundsException. Wiersz powinien wynosić 'pixels [x + (pGrabHeight - y - 1) * pGrabWidth] = pixelsARGB_8888 [x + y * pGrabWidth];' bez pGrabY w drugiej części przypisania. – Orgmir