システム画像の切り取り

2203 ワード

項目の中でピクチャーの裁断に用いて、2つの問題にぶつかって、ここで記録します
  • 大画像
  • を切り取る
    public static Intent cropRawPhoto(Uri uri, int aspectX, int aspectY, int output_X, int output_Y) {
            Intent intent = new Intent("com.android.camera.action.CROP");
            intent.setDataAndType(uri, "image/*");
            //     
            intent.putExtra("crop", "true");
            // aspectX , aspectY :     
            intent.putExtra("aspectX", aspectX);
            intent.putExtra("aspectY", aspectY);
            // outputX , outputY :       
            intent.putExtra("outputX", output_X);
            intent.putExtra("outputY", output_Y);
            intent.putExtra("return-data", false);
    
            File file = new File(MainApp.getPhotoCachePath() + "temp.jpg");
            if (!file.exists()) {
                try {
                    file.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            Uri outputUri = Uri.fromFile(file);
            intent.putExtra(MediaStore.EXTRA_OUTPUT, outputUri);
            return intent;
        }
    

    トリミングが必要なピクチャは比較的大きいので、トリミング後に直接ピクチャデータを返すとoomが現れやすいので、ピクチャデータを返さないように設定するとともに、トリミング後のピクチャをsdカードに保存する一時ファイルを設定する必要があります.intent.putExtra("return-data", false);ここでの「return-data」はfalseであり、ピクチャトリミング後のデータを返さないことを示す.trueはピクチャデータを返します.その後、トリミングしたデータをsdカードに出力します
     File file = new File(MainApp.getPhotoCachePath() + "temp.jpg");
         if (!file.exists()) {
             try {
                 file.createNewFile();
             } catch (IOException e) {
                 e.printStackTrace();
             }
         }
         Uri outputUri = Uri.fromFile(file);
    

    最後に戻るoutputUriで切り取った画像情報を取得し、もちろんsdカードの画像ファイルtempに直接アクセスすることもできます.jpg
  • トリミングボックスサイズ
  • を設定する.
     // aspectX , aspectY :     
     intent.putExtra("aspectX", aspectX);
     intent.putExtra("aspectY", aspectY);
    

    「aspectX」と「aspectY」は、それぞれ裁断ボックスの幅の高さを表します.なお、ここでの値はfloatなどの他のタイプを用いずに整数に設定することが望ましい.全体のスケールに設定すると、クリップボックスはスケールを固定できます.floatタイプは、テストの後、ほとんどの携帯電話がアスペクト比を固定できず、楽視携帯電話1台だけが固定できることが分かった.同時に等比を設定して、例えば1:1、ある携帯電話、1つの円形の裁断枠が現れて、しかしある携帯電話はできません