• 在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();
            }
        }
    }
    
  • 相关阅读:
    聚观早报 |英伟达发布H200;夸克发布自研大模型
    集简云票税通,高效、管理销项发票,满足多样化开票需求
    探究竟篇之React中的state
    【论文阅读】DALL·E: Zero-Shot Text-to-Image Generation
    脏数据绕过waf,Yakit爆破base64编码密码,ssh无密码登录受害主机
    hive安装和shell交互全步骤
    22.flink参数工具 ParameterTool
    第2章-矩阵及其运算-矩阵创建(1)
    MVC模式和三层架构
    Linux连接工具(一)XShell7(免费版)下载及安装步骤
  • 原文地址:https://blog.csdn.net/a518618718/article/details/143387509