安卓屏幕截图 [英] screenshot in android

查看:25
本文介绍了安卓屏幕截图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

以下是我使用 GLSurfaceView 截屏的代码.但是不知道为什么GLSurfaceView.Renderer类中的onDraw()方法没有被调用.

The following is the code I am using to take a screen shot using GLSurfaceView. But I dont know why the onDraw() method in the GLSurfaceView.Renderer Class is not being called.

如果有人可以查看下面的代码并指出我做错了什么.

Please if some one can look at the code below and point out what am I doing wrong.

public class MainActivity extends Activity {

    private GLSurfaceView mGLView;
    int x,y,w,h;
    Display disp;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        // ToDo add your GUI initialization code here

        setContentView(R.layout.main);
        x=0;
        y=0;

        disp = getWindowManager().getDefaultDisplay();

        w = disp.getWidth();
        h = disp.getHeight();

       mGLView = new ClearGLSurfaceView(this);


    }

    class ClearGLSurfaceView extends GLSurfaceView {
    public ClearGLSurfaceView(Context context) {
        super(context);
        setDebugFlags(DEBUG_CHECK_GL_ERROR | DEBUG_LOG_GL_CALLS);
        mRenderer = new ClearRenderer();
        setRenderer(mRenderer);
    }

        ClearRenderer mRenderer;
}


    class ClearRenderer implements GLSurfaceView.Renderer {

    public void onSurfaceCreated(GL10 gl, EGLConfig config) {
        // Do nothing special.
    }

    public void onSurfaceChanged(GL10 gl, int w, int h) {
        //gl.glViewport(0, 0, w, h);
    }

    public void onDrawFrame(GL10 gl) {
        //gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
        int b[]=new int[w*(y+h)];

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

         IntBuffer ib=IntBuffer.wrap(b);

         ib.position(0);

         gl.glReadPixels(x, 0, w, y+h, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, ib);



         for(int i=0, k=0; i<h; i++, k++)

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

          //and so, some correction need.

              for(int 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 bmp = Bitmap.createBitmap(bt, w, h,Bitmap.Config.ARGB_8888);

         try

                {
                        File f = new File("/sdcard/testpicture.png");
                        f.createNewFile();
                        FileOutputStream fos=new FileOutputStream(f);

                        bmp.compress(CompressFormat.PNG, 100, fos);

                        try

                        {

                                fos.flush();

                        }

                        catch (IOException e)

                        {

                                // TODO Auto-generated catch block

                                e.printStackTrace();

                        }

                        try

                        {

                                fos.close();

                        }

                        catch (IOException e)

                        {

                                // TODO Auto-generated catch block

                                e.printStackTrace();

                        }



                }

                catch (FileNotFoundException e)

                {

                        // TODO Auto-generated catch block

                        e.printStackTrace();

                }
                catch(IOException e)
                {
                    e.printStackTrace();
                }

    }
}

}

请有人帮帮我.我刚刚开始学习在 android 上工作.

Please someone help me out. I have just started learning to work on android.

推荐答案

虽然你创建了surfaceview,但你并没有将它设置为当前的contentview

Although you create the surfaceview, you don't set it to be the current contentview

setContentView(mGLView);

此外,您每帧都创建屏幕截图,这非常低效,可能不是您想要的......

Also, you are creating the screenshot every single frame, which is very inefficient and probably not what you'll want..

这篇关于安卓屏幕截图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆