如何捕获surfaceview背景的屏幕截图 [英] How to capture screenshot of surfaceview with background

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

问题描述

在我的应用程序,我想捕捉屏幕,这是surfaceview,但我不是在其上绘制background.how以保存随着background.please绘制的屏幕帮助我如何解决这个问题,能够捕捉画面。

 查看内容= findViewById(R.id.relative21);
        content.setDrawingCacheEnabled(真正的);

        SurfaceHolder sfhTrack = drawingSurface.getHolder();
              sfhTrack.setFormat(PixelFormat.TRANSPARENT);

               私人无效getScreen(){
          // TODO自动生成方法存根

             查看内容= findViewById(R.id.relative21);
                点阵位图= content.getDrawingCache();
            文件MYDIR =新的文件(/ SD卡/ saved_images);
                myDir.mkdirs();
                随机数发生器=新的随机();
                INT N = 10000;
                N = generator.nextInt(N);
                字符串FNAME =图像 - + N +巴。
                档案文件=新的文件(MYDIR,FNAME);
                尝试
                {

                    FileOutputStream中的ostream =新的FileOutputStream(文件);
                    bitmap.com preSS(比较pressFormat.PNG,100,ostream的);
                    ostream.close();
                }
                赶上(例外五)
                {
                    e.printStackTrace();
                }
    }
 

我试图codeI时能够节省背景上面,但我不能够保存其绘制。

解决方案

 公共静态位图覆盖(BMP1位图,位图BMP2){
        位图bmOverlay = Bitmap.createBitmap(bmp1.getWidth(),bmp1.getHeight(),bmp1.getConfig());
        帆布油画=新的Canvas(bmOverlay);
        canvas.drawBitmap(BMP1,0,0,NULL);

        canvas.drawBitmap(BMP2,0,0,NULL);
        Log.i(bmOverlay ......。,,+ bmOverlay);
        BMP3 = bmOverlay;
        返回bmOverlay;
    }

       私人无效getScreen(){
        Toast.makeText(BookType1.this,拯救,Toast.LENGTH_SHORT).show();
          文件MYDIR =新的文件(/ SD卡/ saved_images);
            myDir.mkdirs();
            随机数发生器=新的随机();
            INT N = 10000;
            N = generator.nextInt(N);
            字符串FNAME =图像 - + N +巴。
            档案文件=新的文件(MYDIR,FNAME);


        尝试
        {

            FileOutputStream中的ostream =新的FileOutputStream(文件);
            bmp3.com preSS(比较pressFormat.PNG,100,ostream的);


            ostream.close();
        }
        赶上(例外五)
        {
            e.printStackTrace();
        }
    }
 

通过重叠两个位图我在一个位图解决了这个问题,我拍摄的背景和第二位图我抓住表面观和我重叠无论是在这方面,我得到了解决办法。

in my application i want to capture screen which is with surfaceview but i am not able capture screen on which is drawn with background.how to save the screen with drawn along with background.please help me how to solve this issue.

         View content  = findViewById(R.id.relative21);
        content.setDrawingCacheEnabled(true);

        SurfaceHolder sfhTrack = drawingSurface.getHolder();
              sfhTrack.setFormat(PixelFormat.TRANSPARENT);

               private void getScreen() {
          // TODO Auto-generated method stub

             View content = findViewById(R.id.relative21);
                Bitmap bitmap = content.getDrawingCache();
            File myDir=new File("/sdcard/saved_images");
                myDir.mkdirs();
                Random generator = new Random();
                int n = 10000;
                n = generator.nextInt(n);
                String fname = "Image-"+ n +".png";
                File file = new File (myDir, fname);
                try 
                {

                    FileOutputStream ostream = new FileOutputStream(file);
                    bitmap.compress(CompressFormat.PNG, 100, ostream);
                    ostream.close();
                } 
                catch (Exception e) 
                {
                    e.printStackTrace();
                }
    }

i tried above code i am able to save background but i am not able save which is drawn.

解决方案

   public static Bitmap overlay(Bitmap bmp1,Bitmap bmp2) {
        Bitmap bmOverlay = Bitmap.createBitmap(bmp1.getWidth(), bmp1.getHeight(),      bmp1.getConfig());
        Canvas canvas = new Canvas(bmOverlay);
        canvas.drawBitmap(bmp1, 0,0, null);

        canvas.drawBitmap(bmp2, 0, 0, null);
        Log.i("bmOverlay.......",""+bmOverlay);
        bmp3=bmOverlay;
        return bmOverlay;
    }

       private void getScreen() {
        Toast.makeText(BookType1.this, "saved", Toast.LENGTH_SHORT).show();
          File myDir=new File("/sdcard/saved_images");
            myDir.mkdirs();
            Random generator = new Random();
            int n = 10000;
            n = generator.nextInt(n);
            String fname = "Image-"+ n +".png";
            File file = new File (myDir, fname);


        try 
        {

            FileOutputStream ostream = new FileOutputStream(file);
            bmp3.compress(CompressFormat.PNG, 100, ostream);


            ostream.close();
        } 
        catch (Exception e) 
        {
            e.printStackTrace();
        }
    }

By overlapping two bitmaps i solved this issue in one bitmap i captured background and in second bitmap i captured surface view and i overlapped both in this i got solution.

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

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