从相机获取照片并使用Xamarin.Android将其保存在SQL Server中

问题描述 投票:0回答:1

我是Xamarin.Android的新手。我正在使用Visual Studio 2017开发Android应用程序。

我需要通过照相机以以下方式捕获图像:

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

            base.OnActivityResult(requestCode, resultCode, data);
            if (resultCode == Result.Ok)
            {
                Bitmap bitmap = (Bitmap)data.Extras.Get("data");
                Photo.SetScaleType(ImageView.ScaleType.FitCenter);
                Photo.SetImageBitmap(bitmap);
            }
        Snap.Click += (sender, e) =>
            {
                Intent intent = new Intent(MediaStore.ActionImageCapture);
                StartActivityForResult(intent, 0);
            };

现在的问题是,我想将此照片(位图)保存/插入列类型为Image的Sql Server表中,以便可以在Windows窗体应用程序中显示此照片,并在Crystal报表中进一步使用它。

sql-server image-processing xamarin.android
1个回答
0
投票

直接从App连接到SQL Server是一种糟糕的做法,应该由Web服务来管理,因为解码APK或IPA文件的二进制文件非常容易。然后,用户可以破坏您的SQL数据库。这就是为什么您找不到有关如何执行操作的任何教程的原因。

话虽如此,当您开始图像捕获时,您的代码将看起来像这样StartActivityForResult(intent, save_request_code);

然后您必须重写OnActivityResult函数,该函数在拍照(或从图库中选择)后即被调用。如果操作成功,我们将创建一个字节数组并将其传递给SQL

private const int save_request_code = 7; // You can use any integer

// "protected override void OnActivityResult(int requestCode, int resultCode, Intent data)" depending on your Android support library version
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data) 
{
    base.OnActivityResult(requestCode, resultCode, data);
    switch (requestCode)
    {
        case save_request_code:
            switch ((Result)resultCode) // (Result) conversion not needed if it is already a Result object above 
            {
                case Result.Canceled:
                    break;
                case Result.FirstUser:
                    break;
                case Result.Ok:
                    {
                        try
                        {
                            Bitmap bitmap = MediaStore.Images.Media.GetBitmap(this.ContentResolver, data.Data);
                            using (MemoryStream stream = new MemoryStream())
                            {
                                bitmap.Compress(Bitmap.CompressFormat.Jpeg,100, stream);
                                byte[] array=stream.ToArray();
                                SqlConnection CN = new SqlConnection(txtConnectionString.Text);
                                string qry = "insert into ImagesStore(OriginalPath,ImageData) values(@OriginalPath, @ImageData)";
                                SqlCommand SqlCom = new SqlCommand(qry, CN);
                                SqlCom.Parameters.Add(new SqlParameter("@OriginalPath", (object)txtImagePath.Text));
                                SqlCom.Parameters.Add(new SqlParameter("@ImageData", (object)imageData));
                                CN.Open();
                                SqlCom.ExecuteNonQuery();
                                CN.Close();

                            }

                        }
                        catch (Exception ex)
                        {
                            System.Console.WriteLine (ex.Message)
                        }

                    }
                default:
                    throw new ArgumentOutOfRangeException("resultCode");
            }
            break;
    }
}

同样,请不要在不使用Web服务的情况下将此代码投入生产。

© www.soinside.com 2019 - 2024. All rights reserved.