亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用我制作的應用程序將圖像保存到圖庫?

如何使用我制作的應用程序將圖像保存到圖庫?

Go
人到中年有點甜 2022-11-21 20:06:16
我有這個Xamarin Android 應用程序(不是 Forms),它可以打開相機并讓我拍照并隨拍或拍一張新照片。之后,ImageView使用位圖向我展示應用程序上的圖片。我無法使用位圖保存到畫廊(我不知道該怎么做,或者是否有更簡單的方法)。我需要應用程序獲取應用程序拍攝的最后一張照片(為什么需要保存它)并通過單擊按鈕將其發送到服務器(我也需要一些幫助)。這就是我需要做的。這是代碼MainActivity.cs:using Android.App;using Android.Widget;using Android.OS;using Android.Content;using Android.Provider;using Android.Runtime;using Android.Graphics;namespace CameraApp{    [Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true)]    public class MainActivity : Activity    {        ImageView imageView;        protected override void OnCreate(Bundle bundle)        {            base.OnCreate(bundle);            SetContentView(Resource.Layout.activity_main);            Button btnCamera = FindViewById<Button>(Resource.Id.btnCamera);            imageView = FindViewById<ImageView>(Resource.Id.imageView);            btnCamera.Click += BtnCamera_Click;        }        protected override void OnActivityResult(int requestCode, [GeneratedEnum] Result resultCode, Intent data)        {            base.OnActivityResult(requestCode, resultCode, data);            Bitmap bitmap = (Bitmap)data.Extras.Get("data");            imageView.SetImageBitmap(bitmap);        }        private void BtnCamera_Click(object sender, System.EventArgs e)        {            Intent intent = new Intent(MediaStore.ActionImageCapture);            StartActivityForResult(intent, 0);        }    }}
查看完整描述

2 回答

?
撒科打諢

TA貢獻1934條經驗 獲得超2個贊

我寫了一個關于你的需求的演示。我添加了相機和外部存儲權限并將圖像存儲到畫廊,這里正在運行 GIF。

https://i.stack.imgur.com/FPLUY.gif

有運行demo的代碼。我添加了運行時權限(相機和WriteExternalStorage)請求。并判斷用戶沒有拍照的情況,然后返回應用程序。


[Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true)]

public class MainActivity : AppCompatActivity, ActivityCompat.IOnRequestPermissionsResultCallback

{

    Button button1;

    ImageView imageView1;

    View layout;

    static readonly int REQUEST_CAMERA_WriteExternalStorage = 0;


    protected override void OnCreate(Bundle savedInstanceState)

    {

        base.OnCreate(savedInstanceState);

        // Set our view from the "main" layout resource

        SetContentView(Resource.Layout.activity_main);

        layout = FindViewById<RelativeLayout>(Resource.Id.sample_main_layout);

        button1 = FindViewById<Button>(Resource.Id.button1);

        imageView1 = FindViewById<ImageView>(Resource.Id.imageView1);

        button1.Click += (o, e) =>

        {

            CheckPermission();

        };

    }



    public  void CheckPermission()

    {

        if ((ContextCompat.CheckSelfPermission(this, Manifest.Permission.Camera) == (int)Permission.Granted)&& (ContextCompat.CheckSelfPermission(this, Manifest.Permission.WriteExternalStorage) == (int)Permission.Granted))

        {

            // Camera and store permission has  been granted

            ShowCamera();

        }

        else

        {

            // Camera and store permission has not been granted

            RequestPermission();


        }



    }


    private void RequestPermission()

    {


        ActivityCompat.RequestPermissions(this, new String[] { Manifest.Permission.Camera, Manifest.Permission.WriteExternalStorage }, REQUEST_CAMERA_WriteExternalStorage);


    }



    //get result of persmissions

    public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Permission[] grantResults)

    {

        if (requestCode == REQUEST_CAMERA_WriteExternalStorage)

        {



            if ( PermissionUtil.VerifyPermissions(grantResults))

            {

                // All required permissions have been granted, display Camera.


                ShowCamera();

            }

            else

            {

                // permissions did not grant, push up a snackbar to notificate USERS

                Snackbar.Make(layout, Resource.String.permissions_not_granted, Snackbar.LengthShort).Show();

            }


        }

        else

        {

            base.OnRequestPermissionsResult(requestCode, permissions, grantResults);

        }

    }


    private void ShowCamera()

    {

        Intent intent = new Intent(MediaStore.ActionImageCapture);

        StartActivityForResult(intent, 0);

    }



    protected override void OnActivityResult(int requestCode, [GeneratedEnum] Result resultCode, Intent data)

    {

        base.OnActivityResult(requestCode, resultCode, data);

        Bitmap bitmap=null;

        //If user did not take a photeo , he will get result of bitmap, it is null

        try {

             bitmap = (Bitmap)data.Extras.Get("data");

        } catch(Exception e)

        {

            Log.Error("TakePhotoDemo1", e.Message);

            Toast.MakeText(this, "You did not take a photo", ToastLength.Short).Show();


        }


        if (bitmap != null)

        {

            MediaStore.Images.Media.InsertImage(ContentResolver, bitmap, "screen", "shot");

            imageView1.SetImageBitmap(bitmap);

        }

        else

        {

            Toast.MakeText(this, "You did not take a photo", ToastLength.Short).Show();

        }


    }


}

PermissionUtil.cs通過驗證給定數組中的每個條目是否具有值 Permission.Granted,檢查是否已授予所有給定權限。


   public abstract class PermissionUtil

{


    public static bool VerifyPermissions(Permission[] grantResults)

    {

        // At least one result must be checked.

        if (grantResults.Length < 1)

            return false;


        // Verify that each required permission has been granted, otherwise return false.

        foreach (Permission result in grantResults)

        {

            if (result != Permission.Granted)

            {

                return false;

            }

        }

        return true;

    }

}

有我的代碼。


https://github.com/851265601/TakePhotoDemo1


MediaStore.Images.Media.InsertImage前面的代碼將在 gallery( )的末尾添加圖像。如果您想修改日期以使其出現在開頭或任何其他元數據中,請參閱此鏈接。 https://gist.github.com/samkirton/0242ba81d7ca00b475b9


查看完整回答
反對 回復 2022-11-21
?
神不在的星期二

TA貢獻1963條經驗 獲得超6個贊

您可以通過 MediaStore 插入圖像

MediaStore.Images.Media.InsertImage(this, yourBitmap, yourTitle, yourDescription);

注意:您可能想為此添加寫入外部存儲權限。


查看完整回答
反對 回復 2022-11-21
  • 2 回答
  • 0 關注
  • 118 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號