如何将从 Windows Phone 获取的图像传输到 C# 图片框图像
本文关键字:图像 传输 框图 Windows 获取 Phone | 更新日期: 2023-09-27 18:31:15
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();
}
我终于可以停止用头撞墙了。 :)
你应该使用这样的东西。
---读取缓冲区中的数据并写入 MS2---
MemoryStreamms2 = new MemoryStream();
MS2.写(b, 0, b.Lenght);
---将其加载到PictureBox控件中---
图片框2.图像 = 新位图(ms2);