4

このコードを使用してトリミング アクティビティを開始し、トリミングされた画像を onActivityResult のデータとして取得します。したがって、これは正常に機能します。

    Intent intent = new Intent("com.android.camera.action.CROP");
    intent.setType("image/*");

    List<ResolveInfo> list = getPackageManager().queryIntentActivities(
            intent, 0);

    int size = list.size();

    if (size == 0) {
        Toast.makeText(this, "Can not find image crop app",
                Toast.LENGTH_SHORT).show();
        return;
    } else {
        intent.setData(mImageCaptureUri);

        intent.putExtra("outputX", 200);
        intent.putExtra("outputY", 200);
        intent.putExtra("scale", true);
        intent.putExtra("return-data", true);

        Intent i = new Intent(intent);
        ResolveInfo res = list.get(0);

        i.setComponent(new ComponentName(res.activityInfo.packageName,
                res.activityInfo.name));

        startActivityForResult(i, CROP_FROM_CAMERA);

これは、画像を 200x200 のサイズにトリミングするためのコードです。トリミング アクティビティで選択した縦横比は関係ありません。私の懸念は、200と200の数字を入れて固定するのではなく、アクティビティの長方形で選択したアスペクト比が欲しいということです。

しかし、これらの 2 行をコメントアウトすると、私のプログラムは強制終了します....

写真に配置した長方形の縦横比を維持しながら、トリミング アクティビティで選択した写真の部分に正確にトリミングするためのソリューションはありますか? エクストラとして入れなければならないデータはどれですか? 助けが必要!

4

4 に答える 4

2

Androidで画像から長方形を切り取る方法

組み込みの Android トリミング処理 (com.android.camera.action.CROP) を使用して、正方形以外にトリミングすることはできません。

次のスレッドで OP の返信を見てください。解決策があるかもしれません。

このスレッドには、いくつかの良い提案もあります。

于 2012-05-04T17:34:05.963 に答える
1

アスペクト比の次のコード行を追加するだけです0.75

intent.putExtra("aspectX", 3);
intent.putExtra("aspectY", 4);

スケールを に設定しtrueます。

これで問題は解決するはずです。

于 2012-05-09T06:09:25.110 に答える
0

ギャラリーから画像を選択し、縦横比を維持してトリミングします。この場合、比率は BANNER_WIDTH_PX:BANNER_HEIGHT_PX です。

protected static final int REQ_CODE_PICK_BANNER = 2; //identificador del inten
private static final int BANNER_WIDTH_PX = 640;
private static final int BANNER_HEIGHT_PX =244;

   protected void startSelectorBanner(){
        Intent photoPickerIntent = new Intent(Intent.ACTION_PICK,
            android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
            photoPickerIntent.setType("image/*");
            photoPickerIntent.putExtra("crop", "true");
             photoPickerIntent.putExtra("aspectX",BANNER_WIDTH_PX);  
             photoPickerIntent.putExtra("aspectY",BANNER_HEIGHT_PX);  
             photoPickerIntent.putExtra("outputX",BANNER_WIDTH_PX);  
             photoPickerIntent.putExtra("outputY",BANNER_HEIGHT_PX);  
            photoPickerIntent.putExtra("return-data", true);
            photoPickerIntent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
            startActivityForResult(photoPickerIntent, REQ_CODE_PICK_BANNER);        
  }


public void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) {

            getMainActivity().removeOnActivityResultsListeners(EditQcardFragment.this); 

            switch (requestCode) {
               case REQ_CODE_PICK_BANNER:
                    if (resultCode == Activity.RESULT_OK) {  
                        if (imageReturnedIntent!=null) {
                            Bundle extras = imageReturnedIntent.getExtras();          
                            Bitmap selectedBitmap = extras.getParcelable("data");
                            int[] screenSize = Screen.getSize(getActivity()); 
                            int bannerX = screenSize[0]; 
                            int bannerY = (int) (screenSize[0]/BANNER_RATIO);  

                            Bitmap resizedBitmap = processPicture(selectedBitmap,"banner.png",bannerX,bannerY);
                            mBytesBanner = getPictureBytes("banner.png", resizedBitmap); 
                            log.debug("Get png width: " + mBytesBanner.length);
                            if(mBytesBanner!=null){
                                  mBanner.setImageBitmap(resizedBitmap);
                            }

                        }
                    }break; 
            }       
    }
于 2015-08-20T01:27:51.353 に答える