如何从Uri中获得位图对象(如果我成功地将它存储在 /data/data/MYFOLDER/myimage.png或文件///data/data/MYFOLDER/myimage.png)在我的应用程序中使用它?
有人知道怎么做到吗?
如何从Uri中获得位图对象(如果我成功地将它存储在 /data/data/MYFOLDER/myimage.png或文件///data/data/MYFOLDER/myimage.png)在我的应用程序中使用它?
有人知道怎么做到吗?
当前回答
* For getting bitmap from uri. Work for me perfectly.
public static Bitmap decodeUriToBitmap(Context mContext, Uri sendUri) {
Bitmap getBitmap = null;
try {
InputStream image_stream;
try {
image_stream = mContext.getContentResolver().openInputStream(sendUri);
getBitmap = BitmapFactory.decodeStream(image_stream);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
return getBitmap;
}
其他回答
ContentResolver cr = context.getContentResolver();
try (InputStream input = cr.openInputStream(url)) {
Bitmap bitmap = BitmapFactory.decodeStream(input);
}
你可以这样做:
protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) {
super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
switch(requestCode) {
case 0:
if(resultCode == RESULT_OK){
Uri selectedImage = imageReturnedIntent.getData();
Bundle extras = imageReturnedIntent.getExtras();
bitmap = extras.getParcelable("data");
}
break;
}
通过这个,你可以很容易地将uri转换为位图。 希望能帮助你。
我没有看到正确答案,所以我把这个扩展写在这里
fun Context.getBitmap(uri: Uri): Bitmap =
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) ImageDecoder.decodeBitmap(ImageDecoder.createSource(this.contentResolver, uri))
else MediaStore.Images.Media.getBitmap(this.contentResolver, uri)
代码示例:
val bitmap = context.getBitmap(uri)
提示:你也可以更新活动/片段的扩展,所以你不需要 根本不需要写上下文。再加一点合成糖)
在2022年使用线圈库。
https://coil-kt.github.io/coil/compose/
对于喷气背包组合
AsyncImage(
model = uriOfImage,
contentDescription = null,
)
(芬兰湾的科特林) 所以,截至2020年4月7日,上述选项都没用,但以下是对我有效的:
如果你想在val中存储位图,并设置一个imageView,使用这个: val bitmap = BitmapFactory.decodeFile(currentPhotoPath).also {bitmap -> imageView.setImageBitmap(bitmap)} 如果你只是想设置位图为和imageView,使用这个: BitmapFactory.decodeFile(currentPhotoPath).also {bitmap -> imageView.setImageBitmap(bitmap)}