首页 文章

如何将从Windows手机获取的图像传输到c#图片框图像

提问于
浏览
0

我有一个Windows手机应用程序拍照并将其发送到wcf服务,该服务将其发送到数据库,以便另一个应用程序(Windows窗体应用程序)可以检查数据库并获取图像 .

它将数据作为字节数组添加到数据库中,但是当我检查值时,它们都说相同的数字,但似乎它起作用,因为它们的数据存在 .

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

这是我的Windows手机代码:

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 .

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

我究竟做错了什么?

**** ******************* 编辑 *********************************

我终于在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语句以使用添加方法而不是将值放入字符串中 .

最终解决了这个问题 . 对于nayone来说,工作代码看起来像这样,遇到了这个问题:

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();
    }

我终于可以不停地靠在墙上 . :)

1 回答

  • 0

    你应该使用这样的东西 .

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

    MemoryStream ms2 = new MemoryStream();

    ms2.Write(b,0,b.Lenght);

    // ---将它加载到PictureBox控件中---

    pictureBox2.Image = new Bitmap(ms2);

相关问题