res/drawable
から取得したビットマップと比較して、intent
から取得した同じビットマップの品質ははるかに低くなります。Android - ビットマップ解像度の損失
現在のプロジェクトでは画質が本当に心配ですから、元のビットマップ(圧縮や解像度の損失なし)を電話機のストレージから取得したいと考えています。
intent
から高品質のビットマップを取得するにはどうすればよいですか?私はこのように、外部記憶装置からビットマップを取得するためにintent
を使用
、
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Button galleryBtn = new Button(getActivity());
galleryBtn.setText("Import Photo...");
galleryBtn.setOnClickListener(v -> {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
this.startActivityForResult(intent, 0);
});
//... some more code here
}
//... some more code here
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 0)
try {
if (data != null) {
InputStream stream = getActivity().getContentResolver().openInputStream(
data.getData());
imageBitmap = BitmapFactory.decodeStream(stream);
stream.close();
imageView.setImageBitmap(imageBitmap);
}
} catch (IOException e) {
e.printStackTrace();
}
}
そして、私はこのようにres
からビットマップを取得し、
imageBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image);
のgetDataは、サムネイルを返し、onActivityResultあなたにこれを試して 'getDataString()'その後、ウリ – tyczj
@tyczj経由imaveを得る:ハァッか。 'data.getData()'は 'ACTION_GET_CONTENT'で選択されたコンテンツに' Uri'を返します。 – CommonsWare
"同じビットマップのインテントからの品質がずっと低くなっています" - AFAIK、両方のコードパスが同じ画像デコードロジックを通過しています。あなたの質問を編集し、この効果を与えるビットマップにリンクし、リソースの使用結果を示すスクリーンショットへのリンクと 'ACTION_GET_CONTENT'が提供する' Uri'を使用してください。 – CommonsWare