2012-03-09 9 views
0

現在、アンドロイドで同じ操作(OCR)を実行しようとしていますが、その1つはSD-CARDから画像をロードする方法です。コードは_pathアプリケーション(_path = DATA_PATH + "ocr.jpg";)を用いて撮影した最後の画像に等しいSD-Cardでのファイルの参照、Android

Bitmap bitmap = BitmapFactory.decodeFile(_path,options); 

あるカメラから撮影したときにコードが動作します。しかし、私は_pathが等しくなるギャラリーから選択した画像を使用しようとすると、

imageCaptureUri = data.getData(); 
_path = imageCaptureUri.getPath(); 

プログラムはエラーヌル=

障害deleiving結果ResultInfo {とロックアップ2 =要求、結果は= -1、データ=インテント{データ=コンテンツ://メディア/外部/画像/メディア/ 26 typ =画像/ jpeg(エクストラ)}}アクティビティ{com.project.projectActivity}:java.lang.NullPointerException

誰かが何が起こっているのか考えているなら、私はあなたから聞きたいと思います!

答えて

2

あなたは...

_path = getPath(imageCaptureUri); 


public String getPath(Uri uri) { 
String[] projection = { MediaColumns.DATA }; 
Cursor cursor = managedQuery(uri, projection, null, null, null); 
column_index = cursor 
    .getColumnIndexOrThrow(MediaColumns.DATA); 
cursor.moveToFirst(); 
imagePath = cursor.getString(column_index); 

return cursor.getString(column_index); 
} 
として画像のパスを取得することができます

その後、

Bitmap bitmap = BitmapFactory.decodeFile(_path,options); 

:画像をトリミングする場合、この方法ではこの方法は機能しません。この場合、ギャラリーはトリミングする画像の同じディレクトリにクロップされた画像を生成します。

+0

私はこれを試してみましょう、ありがとうございます! – TomSelleck

+0

チャームのように働いて、ありがとう! – TomSelleck

1

ギャラリーは画像にアクセスするためにあなたにUriを返します。

あなたはBitmapFactoryからdecodeStreamメソッドを使用する必要があり、そのためにあなたが与えられたURIにInputStreamを開く必要があります。

InputStream is = getContentResolver().openInputStream(imageCaptureUri); 
Bitmap bitmap = BitmapFactory.decodeStream(is, options); 
+0

これを試してみると、decodeSteam(InputStream)を(InputStream、BitmapFactory.Options)に適用できないというエラーが表示されます。また、返信いただきありがとうございます! – TomSelleck

+0

はい、私の悪い、あなたがアウトRectを指定する必要がありますhttp://developer.android.com/reference/android/graphics/BitmapFactory.html#decodeStream%28java.io.InputStream,%20android.graphics.Rect,%20android .graphics.BitmapFactory.Options%29 – njzk2

関連する問題