2017-07-27 4 views
1

私のアプリでカメラの機能を使って写真を撮っているとき、カメラのプレビューが良い解像度であっても低解像度の画像が返されます。コードを呼び出すための私のコードは次のとおりです。アンドロイドでアプリを使用して写真を撮るときに、低解像度の写真が表示されるのはなぜですか?

final Button takePicButton = (Button) findViewById(R.id.takePicButton); 
    takePicButton.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
      startActivityForResult(cameraIntent, REQUEST_CAMERA); 
     } 
    }); 

活動の結果のための私のコードは次のとおりです。

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == REQUEST_CAMERA && resultCode == Activity.RESULT_OK) { 
     Bitmap photo = (Bitmap) data.getExtras().get("data"); 
     imageView.setImageBitmap(photo); 

答えて

1

(Bitmap) data.getExtras().get("data");のではPIC

ソリューションをthumbnail(低解像度)を返します: 必要URIメカニズム(イメージファイルへのパス)を使用し、MediaProviderに問い合わせて、フル解像度のイメージを取得します。

Save the Full-size Photo

+0

「結果からのURI」はありません。リンク先のドキュメントにあるように、 'EXTRA_OUTPUT'を介して' Uri'を提供します。 – CommonsWare

+0

uriは、cameraIntentで指定する必要があります。 ACTION_IMAGE_CAPTUREでカメラを起動しても、カメラに保存されているカメラ設定が常に使用されます。たとえば、ユーザが低解像度を使用するカメラアプリケーションをランチした場合、uriを指定しても常に低解像度になります – sansa

0

ACTION_IMAGE_CAPTUREでカメラを起動すると、カメラが低解像度(ユーザーの設定、別のカメラアプリの使用)で設定されているなど、カメラに保存されているカメラ設定が常に使用されます。あなたがuriを指定したとしても、あなたは常に低解像度になります。

だから、あなたは2つのオプションがあります。

  • を使用すると、カメラの活動を所有し、高解像度に
  • をその設定値を設定するビルドは、キャプチャに
0
Uri selectedImage = data.getData(); 
Bitmap picTaken = getBitmapFromUri(selectedImage); 
を開始する前に、手動でカメラの解像度を設定するためにユーザーに依頼

この関数を使用してURIから画像を取得する

private Bitmap getBitmapFromUri(Uri uri) throws IOException { 
    ParcelFileDescriptor parcelFileDescriptor = 
      getActivity().getContentResolver().openFileDescriptor(uri, "r"); 
    FileDescriptor fileDescriptor; 
    if (parcelFileDescriptor != null) { 
     fileDescriptor = parcelFileDescriptor.getFileDescriptor(); 
     Bitmap image = BitmapFactory.decodeFileDescriptor(fileDescriptor); 
     parcelFileDescriptor.close(); 
     ByteArrayOutputStream out = new ByteArrayOutputStream(); 
     image.compress(Bitmap.CompressFormat.PNG, 50, out); 
     return BitmapFactory.decodeStream(new ByteArrayInputStream(out.toByteArray())); 
    } 
    return null; 
} 
関連する問題