0

TLDR アプリで別のアプリから画像を共有しようとするときに、選択した画像でクロップ インテントを開きたい

私のアプリでは、共有インテントを介して別のアプリから画像を共有できます。たとえば、私のアプリで Reddit から画像を直接共有できます。それは完全に正常に動作しますが、一部の画像には上下に巨大な黒い画面があるため(おそらく単なるスクリーンショットであるため)、画像をトリミングできる機能を追加したいと思います。

ギャラリーから取得した画像をトリミングできます。ただし、外部インテントから共有を使用すると、画像が携帯電話に保存されないため、開いてトリミングすることができません。

私のコードで画像を取得する方法

    private void getData() {
    Intent intent = getIntent();
    String action = intent.getAction();
    String type = intent.getType();

    if (Intent.ACTION_SEND.equals(action) && type != null) {
        if (type.startsWith("image/")) {
            handleSendImage(intent);
        }
        if (type.startsWith("text/")) {
            handleSendText(intent);
        }
    }
}


void handleSendImage(Intent intent) {
    imageUrl = intent.getParcelableExtra(Intent.EXTRA_STREAM);

    if (imageUrl != null) {

        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        try {
            BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUrl),
                    null,
                    options);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        choose_image_iv.setColorFilter(0);
        Picasso.get().load(imageUrl).fit().into(choose_image_iv);

        try {
            Bitmap img = MediaStore.Images.Media.getBitmap(getContentResolver(), imageUrl);
            if (img == null) return;
            int w = img.getWidth();
            int h = img.getHeight();

            rat = (double) w / (double) (h);

        } catch (IOException e) {
            e.printStackTrace();
        }

        if (rat == 0.0) {
            rat = 1.0;
        }

        rightNavButton.setEnabled(true);
        rightNavButton.setImageResource(R.drawable.baseline_navigate_next_black_24dp);
        rightNavButton.setColorFilter(ContextCompat.getColor(ShareFromOutsideActivity.this, R.color.AppColor));
        titleView.setText(R.string.choose_category);
        post_text_text_tv.requestFocus();
    }else {
        new SweetAlertDialog(this, SweetAlertDialog.ERROR_TYPE)
                .setTitleText("Mit diesem Bild scheint etwas nicht zu stimmen. Probier ein anderes").show();

    }
}
4

0 に答える 0