Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用Xamarin.Android从相机获取照片并保存在SQL Server中_Sql Server_Image Processing_Xamarin.android - Fatal编程技术网

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

Sql server 使用Xamarin.Android从相机获取照片并保存在SQL Server中,sql-server,image-processing,xamarin.android,Sql Server,Image Processing,Xamarin.android,我是Xamarin.Android的新手。我正在使用Visual Studio 2017开发Android应用程序 我需要通过相机拍摄图像,我采用以下方法: protected override void OnActivityResult(int requestCode, [GeneratedEnum] Result resultCode, Intent data) { base.OnActivityResult(requestCode, resultC

我是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);
            };

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

直接从应用程序连接到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;
    }
}
您似乎也没有授予应用程序读取手机数据的权限,因此您可以通过将以下内容添加到清单文件来执行此操作:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>


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

您的问题是?请阅读“对不起,把问题放在格式之外”。我在上一篇文章中提到了我的问题,即现在的问题是我想将此照片(位图)保存/插入到列类型图像中的Sql Server表中,以便在Windows窗体应用程序中显示此照片,并在crystal reports中进一步使用它。您不必引用您的帖子。我能很好地阅读原文。这不是一个问题,你说你想要什么,但你不告诉我们什么阻止你这么做。如果你要问如何解决你的问题,你至少应该展示一些自己的努力。有自己的想法吗?做过什么调查吗?你无法克服的障碍是什么?如果你想将图像存储到SQL Server中,你需要将图像文件读入字节数组,一旦你在字节数组中有了图像数据,你就可以使用SQL参数轻松地将这些图像数据存储到SQL Server中,下面是代码@Piege,很抱歉没有提供那么多信息,因为这是我的第一篇文章。我应该编辑我的帖子吗?谢谢你的回复。将遵守您关于使用web服务的建议。我调用intent on按钮,如下所示:intent intent=newintent(MediaStore.ActionImageCapture);StartActivityForResult(意图、保存请求代码);照相机打开,当我拍照时,位图Bitmap=MediaStore.Images.Media.GetBitmap(this.ContentResolver,data.data)出现异常“Java.Lang.NullPointerException:uri”;更新了答案,您需要给予权限!