如何解决Cocos2d Android截图黑色问题?
澳门威尼斯人官网
澳门威尼斯人官网
当前位置 : 澳门威尼斯人官网 > 威尼斯人官网

如何解决Cocos2d Android截图黑色问题?

我用下面的代码来实现菜单栏的功能,但发现图片截屏保存后,却显示为黑色。请帮我看看代码,是哪个环节我写错了。

case R.id.id_menu_Save:

           Bitmap bmp = SavePixels0, 0, 800, 400, CCDirector.sharedDirector.gl;

           File file = new File"/sdcard/test.jpg";

           try

           {

               file.createNewFile;

               FileOutputStream fos = new FileOutputStreamfile;

               bmp.compressCompressFormat.JPEG, 100, fos;

               Toast.makeTextgetApplicationContext, "Image Saved", 0.show;

               Log.i"Menu Save Button", "Image saved as JPEG";

           }

           catch Exception e

           {

               e.printStackTrace;

           }

           break;

下面是保存图片的功能代码:

public static Bitmap SavePixelsint x, int y, int w, int h, GL10 gl

{  

    int b[]=new int[w*y+h];

    int bt[]=new int[w*h];

    IntBuffer ib=IntBuffer.wrapb;

    ib.position0;

    gl.glReadPixelsx, 0, w, y+h, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, ib;

    forint i=0, k=0; i<h; i++, k++

    {//remember, that OpenGL bitmap is incompatible with Android bitmap

     //and so, some correction need.        

         forint j=0; j<w; j++

         {

              int pix=b[i*w+j];

              int pb=pix>>16&0xff;

              int pr=pix<<16&0x00ff0000;

              int pix1=pix&0xff00ff00 | pr | pb;

              bt[h-k-1*w+j]=pix1;

         }

    }

   Bitmap sb = Bitmap.createBitmapbt, w, h, Bitmap.Config.ARGB_8888;

   return sb;

}

除此之外,我还希望大家不吝赐教,指点我一条正确的方向。比如我想获取屏幕的像素,我需要应用到哪些类和实体呢?

原问题:COCOS 2D screen shot is black in Android

答案
jeet:只需要修改SavePixelx的方法,如下:

public static Bitmap SavePixelsint x, int y, int w, int h, GL10 gl
{  
     int b[]=new int[w*y+h];
     int bt[]=new int[w*h];
     IntBuffer ib=IntBuffer.wrapb;
     ib.position0;
     gl.glReadPixelsx, 0, w, y+h, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, ib;

     forint i=0, k=0; i<h; i++, k++
     {
          //remember, that OpenGL bitmap is incompatible with Android bitmap
          //and so, some correction need.        
          forint j=0; j<w; j++
          {
               int pix=b[i*w+j];
               int pb=pix>>16&0xff;
               int pr=pix<<16&0xffff0000;
               int pix1=pix&0xff00ff00 | pr | pb;
               bt[h-k-1*w+j]=pix1;
          }
     }

    Bitmap sb = Bitmap.createBitmapbt, w, h, Bitmap.Config.ARGB_8888; 
    return sb;
}

栏目列表

广告位

澳门威尼斯人官网