2017-06-12 8 views
0

に私はエラーUnable to load imageを得たcameraを使用して画像をトリミングするたびに画像をトリミング。しかし、galleryの場合、正常に動作しました。 imagecropためはアンドロイド

Uri uriPath = StoreAndFetchImageFromFile.getInstance(ParentDetails.this).getImageUri(partFilename); 
       selectedimagepath = getPath(uriPath); 

       Bitmap myBitmap = BitmapFactory.decodeFile(selectedimagepath); 
       parentimage.setImageBitmap(myBitmap); 
       performCropCamera(uriPath); 

および方法である:

private void performCropCamera(Uri picUri) { 
    // take care of exceptions 
    try { 
     // call the standard crop action intent (the user device may not 
     // support it) 
     Intent cropIntent = new Intent("com.android.camera.action.CROP"); 
     // indicate image type and Uri 
     cropIntent.setDataAndType(picUri, "image/*"); 
     // set crop properties 
     cropIntent.putExtra("crop", "true"); 
     int asp = (int) (DeviceDimensions.getScreenWidth() - 80)/187; 
     // indicate aspect of desired crop 
     cropIntent.putExtra("aspectX", asp); 
     cropIntent.putExtra("aspectY", 3); 
     // indicate output X and Y 
     cropIntent.putExtra("outputX", DeviceDimensions.getScreenWidth() - 80); 
     cropIntent.putExtra("outputY", 187*3); 
     // retrieve data on return 
     cropIntent.putExtra("return-data", true); 
     // start the activity - we handle returning in onActivityResult 
     startActivityForResult(cropIntent, PIC_CROP); 
    } 
    // respond to users whose devices do not support the crop action 
    catch (ActivityNotFoundException anfe) { 
     Toast toast = Toast 
       .makeText(this, "This device doesn't support the crop action!", Toast.LENGTH_SHORT); 
     toast.show(); 
    } 
} 

と画像作物のためOnActivity結果は次のとおりです。

if (requestCode == PIC_CROP) { 
      // get the returned data 
      Bundle extras = data.getExtras(); 
      // get the cropped bitmap 
      Bitmap thePic = extras.getParcelable("data"); 
      parentimage.setImageBitmap(thePic); 
     } 
+2

は、作物の機能は、Androidのために必須ではないことに注意してください、と一部のデバイスは、 'com.android.camera.action.CROP'を持っていない可能性があります。したがって、外部の作物機能を使用することは悪い考えです。私は作物用の図書館を見つけてそれを使うのがよいでしょう。 –

+0

Thnxしかし、なぜカメラでこの現象が起きているのですか? – Vinay

+0

[Intent com.android.camera.action.CROPを処理するためのアクティビティが見つかりません](https://stackoverflow.com/questions/41890891/no-activity-found-to-handle-intent-com-android-カメラアクション作物) – W4R10CK

答えて

0

それはおそらくバックコマンドの後に、別の形式で付属しています。インテントのファイルは、いくつかの異なる場所に隠れることができます。これらのファイルには、ストリームを起動するためのいくつかの方法があります。権限を持つアイテムもいくつかあります。カメラの意図によってデータが一方向に表示され、クロップされたデータがクロップされたデータを別の方法で返す可能性があります。だからあなたは2つが同じであるとは期待できません。すべての拠点をカバーする必要があります。

これはお使いのデバイスのCROP機能に過ぎません。他のデバイスにはクロップ機能はなく、別のデバイスでも機能が異なる場合があります。私は彼らの多くを信じていません。これは、文字通りボックスを描画し、ビットマップを別のビットマップにペイントします。私はサードパーティのライブラリを使用し、あなたのアプリにそれを含める。その後、あなたはそれが働いたと確信することができます。

いいですね。その機能が存在するかどうかは分かりません。一貫性のある仕方で機能することははるかに少ない。

私は、ファイルをファイルストリームにエキストラにすることができ思い出します。これはcontent://またはfile://オブジェクトです。そして、パーミッションはtrixyになるかもしれません。ギャラリーは名前付きサフィックスのないcontent://ファイルとして返す傾向がありますが、カメラはファイルの接尾辞を読み取ることがあります。

私はあなたのものの名前を検索する必要があるいくつかの回は、他の時間、それは適切にあなたに正しいサフィックスを与える含まURIに対し、ファイルタイプを知るために、ギャラリーから返されたこのようなものを見てきました。

これは、これらの基本的作物の目的は、機能的価値のないものにする他の理由です。私が推測しなければならないのは、ファイルが作物から戻ったときに期待していたのとは異なる方法で保存されていることです。異なるものが異なる場所の束にファイルを入れているので、それはあるかもしれない見つけることを期待して

public Uri getUriFromIntent(Intent intent) { 
    Uri uri = intent.getData(); 
    if (uri != null) return uri; 

    Bundle bundle = intent.getExtras(); 
    if (bundle == null) return null; 

    Object object = bundle.get(Intent.EXTRA_STREAM); 
    if (object instanceof Uri) { 
     return (Uri) object; 
    } 
    return null; 
} 

、それはあなたが正確なサービスわからない場合は、それらを見つけることを試み本当に変に:私のようなものを使用しますそれはあなたにURIを与えました。