如何将从 Windows Phone 获取的图像传输到 C# 图片框图像

本文关键字:图像 传输 框图 Windows 获取 Phone | 更新日期: 2023-09-27 18:31:15

我有一个Windows Phone应用程序,它可以拍摄照片并将其发送到WCF服务,

WCF服务将其发送到数据库,以便另一个应用程序(Windows 窗体应用程序)可以检查数据库并获取图像。

它将数据作为字节数组添加到数据库中,但是当我检查值时,它们都说相同的数字,但似乎它有效,因为他们的数据在那里。

但是,当我尝试将该数据转换为图像时,它会抛出一个异常,指出该参数无效。我已经搜索了如何做到这一点,但我发现的(即使在这里)准确地说明了我在做什么。所以我不确定出了什么问题。

这是我的Windows Phone代码:

if (e.TaskResult == TaskResult.OK)
        {
            var bitImage = new BitmapImage();
            bitImage.SetSource(e.ChosenPhoto);
            //image is a Image Control in the form
            ImageServiceClient client = new ImageServiceClient();
            byte[] array;
            using(var stream = new MemoryStream())
            {
                var btmMap = new WriteableBitmap(bitImage.PixelWidth, bitImage.PixelHeight);
                // write an image into the stream
                btmMap.SaveJpeg(stream, bitImage.PixelWidth, bitImage.PixelHeight, 0, 100);
                array = stream.ToArray();
            }
            client.AddImageAsync(array);
        }

最后一行调用我的 WCF 服务中的 Add 方法,如下所示:

public void AddImage(byte[] array)
    {
        var con =
            new MySqlConnection(
                "server=instance11297.db.xeround.com;User Id=Admin;Password=nomoredrama2010;port=7692;database=capstone");
       con.Open();
        string h = array.Aggregate(h, (current, b) => current + b);
        string text = "INSERT INTO images VALUES (''," + h + ")";
        Console.WriteLine(text);
        var command = new MySqlCommand(text, con);
        var result = command.ExecuteReader();
       result.Close();
    }

需要注意的是,无论是直接使用传入的数组还是将其转换为文本,它们在数据库中的显示方式都相同。

最后,在应用程序中,这是将所有内容发送到,我有这个:

var con =
            new MySqlConnection(
                "server=instance11297.db.xeround.com;User Id=Admin;Password=nomoredrama2010;port=7692;database=capstone");
        con.Open();
        string h = "";
        string text = "select Image from images where ImageId=4";
        var command = new MySqlCommand(text, con);
        var dr = command.ExecuteReader();
        var g = new byte[] {};
        if(dr.Read())
          g = (byte[])dr[0];
        dr.Close();
        var image = Image.FromStream(new MemoryStream(g));
        pictureBox1.Image = image;

但它总是在"var image = Image.FromStream(new MemoryStream(g));"上中断,表示该参数无效。

我发现一旦它得到图像,它就会有一个大数组,但数据库中的数组只有 65 字节,他们都说 57 字节。

为什么它完全忽略了我的图像数组并将其替换为所有 65 个字节中的一个 57 个?

我做错了什么?

*****编辑*

**

在 wcf 应用程序中启用调试器后,我终于发现了问题所在。http://msdn.microsoft.com/en-us/library/ff649234.aspx(对于那些不知道的人)

我也看了这里:http://www.codeproject.com/Articles/9686/Save-An-Image-Into-SQL-Server-2000-Database

看看为什么它抛出"你的SQL是错误的"类型错误,并将我的SQL语句更改为使用Adding方法而不是将值放入字符串中。

这最终解决了它。工作代码看起来像这样,因为其他人遇到了这个问题:

public void AddImage(byte[] array)
    {
        var con =
            new MySqlConnection("server=instance11297.db.xeround.com;User Id=Admin;Password=nomoredrama2010;port=7692;database=capstone");
        con.Open();
        string text = "INSERT INTO images (ImageId, Image) VALUES ('',@bytes)";
        var command = new MySqlCommand(text, con);
        command.Parameters.AddWithValue("@bytes", array);
        command.ExecuteNonQuery();
        con.Close();
    }

我终于可以停止用头撞墙了。 :)

如何将从 Windows Phone 获取的图像传输到 C# 图片框图像

你应该使用这样的东西。

---读取缓冲区中的数据并写入 MS2---

MemoryStream

ms2 = new MemoryStream();

MS2.写(b, 0, b.Lenght);

---将其加载到PictureBox控件中---

图片框2.图像 = 新位图(ms2);