如何使用相机在Android中以编程方式截取屏幕截图?

时间:2017-03-27 14:44:03

标签: android camera android-camera screenshot fullscreen

相机区域透明。

我在stackoverflow中搜索了类似的问题,并找到了一些答案,但所有这些都不适合我的情况。

她是我发现的一个问题:How to programmatically take a screenshot in Android?

我有一个自定义视图( CameraView )可以显示相机抓取的内容。但是当我使用上面的方式截图时,我发现 CameraView 区域是透明,但这是我不想要的。

有我使用手机截图的图片。为了能够很好地显示我向ImageView的父母添加黑色背景。

截屏之前http://paradisehell.org/img/bug/before_screenshot.jpg

屏幕截图http://paradisehell.org/img/bug/after_screenshot.jpg

这是我的代码:

View view = ((Activity)mContext).getWindow().getDecorView().getRootView();
view.setDrawingCacheEnabled(true);
view.buildDrawingCache();
Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache());
view.setDrawingCacheEnabled(false);
if (bitmap != null && listener != null){
    listener.onScreenShot(bitmap);
}
public void onScreenShot(Bitmap shot) {
    Log.e("TAG", CameraViewUtils.getBase64StringFromBitmap(shot));
    imageView.setImageBitmap(shot);
}

你有什么想法可以解决吗?请告诉我,谢谢。

1 个答案:

答案 0 :(得分:0)

首先放置清单权限。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

这是帮助您截取屏幕的代码

private void Screenshot() {
    Date now = new Date();
    android.text.format.DateFormat.format("yyyy-MM-dd_hh:mm:ss", now);


        String mPath = Environment.getExternalStorageDirectory().toString() + "/" + now + ".jpg";

        View v1 = getWindow().getDecorView().getRootView();
        v1.setDrawingCacheEnabled(true);
        Bitmap bitmap = Bitmap.createBitmap(v1.getDrawingCache());
        v1.setDrawingCacheEnabled(false);

        File image = new File(mPath);

        FileOutputStream output = new FileOutputStream(image);
        int quality = 100;
        bitmap.compress(Bitmap.CompressFormat.JPEG, quality, output);
        output.flush();
        output.close();

        openScreenshot(image);
    }

这可以帮助你。

相关问题