当前位置: 首页 > 知识库问答 >
问题:

使用媒体投影android studio截图的问题

明利
2023-03-14
    null

@suppressLint(“错误常量”)

private void screenshot() {

    Point size = new Point();
    displayy.getSize(size);
    mWidth = size.x;
    mHeight = size.y;
    displayy.getMetrics(metrics);
    int mDensity = metrics.densityDpi;
    Handler handler=new Handler();


    mImageReader = ImageReader.newInstance(mWidth, mHeight, PixelFormat.RGBA_8888, 2);
    
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        displayyy = mMediaProjection.createVirtualDisplay(DISPLAY_NAME, mWidth, mHeight, mDensity, DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR, mImageReader.getSurface(), null, handler);
    }
    mImageReader.setOnImageAvailableListener(new ImageReader.OnImageAvailableListener() {
        int onImageCount = 0;
        
        @Override
        public void onImageAvailable(ImageReader reader) {

            Image image = null;
            FileOutputStream fos = null;
            Bitmap bitmap = null;

            try {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                    image = reader.acquireLatestImage();
                }
                if (image != null) {
                    Image.Plane[] planes = new Image.Plane[0];
                    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
                        planes = image.getPlanes();
                    }
                    ByteBuffer buffer = planes[0].getBuffer();
                    int pixelStride = planes[0].getPixelStride();
                    int rowStride = planes[0].getRowStride();
                    int rowPadding = rowStride - pixelStride * mWidth;

                    bitmap = Bitmap.createBitmap(mWidth + rowPadding / pixelStride, mHeight, Bitmap.Config.ARGB_8888);
                    
                    bitmap.copyPixelsFromBuffer(buffer);
                    
                    SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy_HH:mm:ss");
                    String formattedDate = df.format(Calendar.getInstance().getTime()).trim();
                    String finalDate = formattedDate.replace(":", "-");

                    String imgName = "/imagen"+ "_" + finalDate + ".jpg";
                    String dirPath = Environment.getExternalStorageDirectory().getAbsolutePath()
                            + "/example";
                    File dir = new File(dirPath);
                    if(!dir.exists()){
                        dir.mkdirs();
                    }

                    String mPath = dirPath + imgName;
                    File imageFile = new File(mPath);

                    fos = new FileOutputStream(imageFile);
                    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
                    Log.e(TAG, "captured image: " );
                }

            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (fos != null) {
                    try {
                        fos.close();
                    } catch (IOException ioe) {
                        ioe.printStackTrace();
                    }
                }

                if (bitmap != null) {
                    bitmap.recycle();
                }

                if (image != null) {
                    image.close();
                }
            }
        }
    }, handler);
    
    mMediaProjection.stop();
    mMediaProjection=null;
}

共有1个答案

俞俊逸
2023-03-14

我不知道你是否已经解决了你的问题,但这里是我的解决方案:该方法接收4个参数,最后一个是照片的数量

在此处输入代码ImageReader.newInstance(宽度:Int,高度:Int,格式:Int,maximages:Int)

如果你看起来很好,你会在最后一个参数中发送照片的数量2

 类似资料:
  • 我想录制1分钟屏幕内容。搜索google后,发现api level 21包含类。我的应用程序是为api level 18构建的。 我能使用这个类吗?有没有这方面的支持库?

  • 问题:当我引用实体集合字段作为HQL语句的一部分时,HQL查询没有返回任何结果。它适用于一个HQL投影,例如: categoryTypes是IncidentEntity类字段之一(它是定义为多个联接的集合,如下所示)。这很好,但当我尝试引用另一个映射为多个联接的投影集合时,问题就出现了。 一旦我这样做,我就得到一个空的集合。这意味着hibernate生成的SQL查询不会返回任何内容。我已经通过在S

  • 问题内容: 是否可以使用css3为svg元素设置阴影,类似 我看到了有关使用滤镜效果创建阴影的一些评论。有没有单独使用css的示例。下面是正确使用cusor样式但没有阴影效果的工作代码。请帮助我以最少的代码获得阴影效果。 问题答案: 这是一个使用’filter’属性将dropshadow应用于某些svg的示例。如果要控制阴影的不透明度,请查看此示例。该属性控制赋予阴影的透明度。 示例中的相关位:

  • 有很多关于3D的opengl投影矩阵的很棒的教程,但我不是在做3D。我真的很难根据自己的喜好进行正交投影设置。 int宽=320;int高=480; 我使用这些设置创建了一个视图投影矩阵。 创建此视图和投影矩阵并将它们传递给gpu之后。 然后我创建一个从的四边形,以便它的原点位于中心。 然后我为四边形制作一个比例矩阵,这样我就可以在屏幕上看到它了。它呈现为一个完美的正方形,但当然glViewpor

  • 问题内容: 我对Hibernate的 预测 和 标准 感到困惑。何时使用投影以及何时使用标准? 问题答案: 它们不是互斥的,您可以同时使用两者。投影通常在某些条件下使用。 简而言之,使用Hibernate Projections来仅查询要使用Criteria查询的一个实体或一组实体的属性的子集。您还可以使用预测指定条款和聚合函数一样,等等。这就像指 其 数据你抓取。就像修改SQL查询中的子句一样。

  • 我正在将Bostock的美国地图集(未过滤的美国各州shp文件)中的地图文件转换为topojson。最后我得到了这张地图。有人知道为什么吗? 我的投影代码:var svg=d3.select("#交互式")。插入("svg")。attr("宽度",w)。attr("高度",h); 我尝试过的原始文件(做同样的事情):12,转换文件:12,