2017-01-21 18 views
0

イメージをsdcardからキャンバスにロードするにはどうすればよいですか?私はこのコードを試して、それは動作していません。イメージをsdcardからキャンバスに読み込むことができません

Uri selectedImage = data.getData(); 
    if (selectedImage == null) { 
     Log.e(getString(R.string.app_name), "selected image uri is null"); 
     return; 
    } 

    String[] filePath = { MediaStore.Images.Media.DATA }; 
    Cursor cursor = getActivity().getContentResolver().query(selectedImage, filePath, null, null, null); 
    if(cursor==null){ 
     Log.e(getString(R.string.app_name), "image cursor is null"); 
     return; 
    } 
    cursor.moveToFirst(); 
    String imagePath = cursor.getString(cursor.getColumnIndex(filePath[0])); 
    cursor.close(); 
    Bitmap bitmap = BitmapFactory.decodeFile(imagePath); 
    Bitmap bitmap2 = Bitmap.createBitmap(bitmap.getHeight(),bitmap.getWidth(),bitmap.getConfig()); 
    mCanvas.setBitmap(bitmap2); 
    Paint p = new Paint(); 
    mCanvas.drawBitmap(bitmap,0,0,p); 

詳細はお問い合わせください。 誰でもこのコードで何が間違っているかを伝えることができます。どんな助けもありがとう。

答えて

1

私はこのUriがどこから来ているのか分かりません。しかし:

  • はすべてMediaStoreものを取り除く

  • 使用ContentResolveropenInputStream()そのストリームからデコードするUri

  • 使用BitmapFactory.decodeStream()によって識別されるコンテンツのInputStreamを取得する

Als O:

  • は、バックグラウンドスレッドにopenInputStream()decodeStream()仕事を動かす

  • an image-loading library

  • への切り替えを検討し、最終的には実行時の権限

  • の取り扱いを含め、あなたがREAD_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGEを要求していることを確認してください

+0

@CommonsWareIが変更されましたコードはあなたが言ったように、画像の読み込みを非同期タスクに移しました。私は、デバッガのキャンバスにロードされたビットマップを見ることができます。それは画面に表示されていません。 – Sony

+0

@sony: 'Bitmap'が正しく読み込まれるまで、' ImageView'に一時的にロードしたいかもしれません。 'new Paint()'の代わりに 'null'を渡すことも考えられます。 – CommonsWare

+0

イメージビューにイメージをロードしようとしましたが、動作していますが、なぜキャンバスがイメージで表示されないのか分かりません。 – Sony

関連する問題