• 在Android中实现区域截屏


    Android中实现区域截屏,可以使用以下步骤和代码示例。这个示例如何捕获指定区域的屏幕截图,并将其保存为图片文件。

    步骤
    获取屏幕截图:使用View的draw方法将屏幕内容绘制到Bitmap中。
    裁剪指定区域:从完整的Bitmap中裁剪出指定区域。
    保存图片:将裁剪后的Bitmap保存到文件中。
    代码示例

    import android.graphics.Bitmap;
    import android.graphics.Canvas;
    import android.graphics.Rect;
    import android.os.Environment;
    import android.view.View;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class ScreenCaptureUtil {
    
        /**
         * 获取指定区域的屏幕截图
         *
         * @param view       要截屏的View
         * @param rect       指定区域的Rect
         * @param savePath   保存路径
         * @param saveName   保存文件名
         * @return 是否保存成功
         */
        public static boolean captureRegion(View view, Rect rect, String savePath, String saveName) {
            // 创建一个与屏幕大小相同的Bitmap
            Bitmap fullScreenshot = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
            Canvas canvas = new Canvas(fullScreenshot);
            view.draw(canvas);
    
            // 裁剪指定区域
            Bitmap regionScreenshot = Bitmap.createBitmap(fullScreenshot, rect.left, rect.top, rect.width(), rect.height());
    
            // 保存图片
            File file = new File(savePath, saveName);
            try (FileOutputStream fos = new FileOutputStream(file)) {
                regionScreenshot.compress(Bitmap.CompressFormat.PNG, 100, fos);
                fos.flush();
                return true;
            } catch (IOException e) {
                e.printStackTrace();
                return false;
            } finally {
                if (fullScreenshot != null) {
                    fullScreenshot.recycle();
                }
                if (regionScreenshot != null) {
                    regionScreenshot.recycle();
                }
            }
        }
    
        /**
         * 获取外部存储目录
         *
         * @return 外部存储目录
         */
        public static File getExternalStorageDirectory() {
            return Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
        }
    }
    

    使用示例

    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.Toast;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    public class MainActivity extends AppCompatActivity {
    
        private Button captureButton;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            captureButton = findViewById(R.id.capture_button);
            captureButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    captureRegion();
                }
            });
        }
    
        private void captureRegion() {
            // 获取要截屏的View
            View rootView = getWindow().getDecorView().getRootView();
    
            // 指定区域的Rect
            Rect rect = new Rect(100, 100, 500, 500); // 示例区域
    
            // 保存路径和文件名
            String savePath = ScreenCaptureUtil.getExternalStorageDirectory().getAbsolutePath();
            String saveName = "screenshot.png";
    
            // 截取并保存屏幕截图
            boolean success = ScreenCaptureUtil.captureRegion(rootView, rect, savePath, saveName);
            if (success) {
                Toast.makeText(this, "截图成功", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(this, "截图失败", Toast.LENGTH_SHORT).show();
            }
        }
    }
    
  • 相关阅读:
    实时渲染方程
    AI | 第5章 深度学习 TensorFlow2 神经网络与卷积神经网络
    STM32F103 + lwIP1.4.1 + ENC28J60 + RT-Thread-v3.1.3
    code:blocks安装(最新详解版)
    P1396 营救-最短路dijkstra和最小生成树kruskal+并查集
    【React】React学习:从初级到高级(二)
    js加密双重保障之sm2国密
    《canvas》之第12章 其他应用
    Spring5应用之Cglib动态代理
    AJAX基础
  • 原文地址:https://blog.csdn.net/a518618718/article/details/143387509