库中的图像未保存到位图



我试图保存图像我从画廊到我的位图,但它一直给我一个系统。NullReferenceException: '对象引用未设置为对象的实例。'的错误。如果我把它从我的相机拍照中保存下来,它就能工作。如果有人知道如何解决这个问题,如果你能帮助我,我将非常高兴<3

private void GalleryAction(object sender, DialogClickEventArgs e)
{
Intent intent = new Intent();
intent.SetType("image/*");
intent.SetAction(Intent.ActionGetContent);
StartActivityForResult(intent,1);
}
private void CameraAction(object sender, DialogClickEventArgs e)
{
Intent intent = new Intent(Android.Provider.MediaStore.ActionImageCapture);
StartActivityForResult(intent, 0);
}
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
if (requestCode == 0)//coming from camera
{
if (resultCode == Result.Ok)
{
bitmap = (Android.Graphics.Bitmap)data.Extras.Get("data");
iv.SetImageBitmap(bitmap);
}

}
else if(requestCode == 1) //coming from gallery
{
if (resultCode == Result.Ok)
{
bitmap = (Android.Graphics.Bitmap)data.Extras.Get("image");
iv.SetImageBitmap(bitmap);
}
}
}

就像您提供的代码一样,首先从gallery中挑选图像。然后从您选择的图像中获取uri。

然后你可以将uri转换为位图。

private Android.Graphics.Bitmap NGetBitmap(Android.Net.Uri uriImage)
{
Android.Graphics.Bitmap mBitmap = null;
mBitmap = Android.Provider.MediaStore.Images.Media.GetBitmap(this.ContentResolver, uriImage);
return mBitmap;
}

最后,你可以将位图设置为imageview

整个代码:

public static readonly int PickImageId = 1000;
ImageView _imageView;
Button btn_GetImageFromGrallery;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
Xamarin.Essentials.Platform.Init(this, savedInstanceState);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.activity_main);
_imageView = FindViewById<ImageView>(Resource.Id._imageView);
btn_GetImageFromGrallery = FindViewById<Button>(Resource.Id.btn_GetImageFromGrallery);
btn_GetImageFromGrallery.Click += Btn_GetImageFromGrallery_Click;
}
private void Btn_GetImageFromGrallery_Click(object sender, System.EventArgs e)
{
Intent intent = new Intent();
intent.SetType("image/*");
intent.SetAction(Intent.ActionGetContent);
//StartActivityForResult(intent, 1);
StartActivityForResult(Intent.CreateChooser(intent, "Select Picture"), PickImageId);
}
protected override void OnActivityResult(int requestCode, [GeneratedEnum] Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
if ((requestCode == PickImageId) && (resultCode == Result.Ok) && (data != null))
{
Android.Net.Uri uri = data.Data;
var bitmap = NGetBitmap(uri);
//_imageView.SetImageURI(uri);
_imageView.SetImageBitmap(bitmap);
};
}
private Android.Graphics.Bitmap NGetBitmap(Android.Net.Uri uriImage)
{
Android.Graphics.Bitmap mBitmap = null;
mBitmap = Android.Provider.MediaStore.Images.Media.GetBitmap(this.ContentResolver, uriImage);
return mBitmap;
}

选择ACTION_GET_CONTENT不会给你一个位图,而是一个所选文件的Uri。

Uri uri = data.getData)); // in Java

最新更新