问题描述
|
public Image图片{get;组; }
Image=(Image)randomImageFromCommentsClass.Image;
我得到这个:
无法将System.Drawing.Image转换为System.Web.UI.WebControls
我认为我导入了错误的名称空间(System.Drawing)。这可能是错误的。我想做的是将图像类型从数据库转换为图像对象。
public class Comments
{
public Image Image { get; set; }
Image = dbnull.Value.Equals(dr[\"Avatar\"]) ? null: (Image)dr[\"Image\"];
上面的图像属性来自Visual Studio 2010中的其他类代码文件。
演员表以某种方式失败..我该如何解决?
解决方法
除非您要投射的对象是另一个对象的实例,否则绝对不可能进行投射。
您可以使用此代码段将字节数组隐藏到Image中:
public Image byteArrayToImage(byte[] byteArrayIn){
MemoryStream ms = new MemoryStream(byteArrayIn);
Image returnImage = Image.FromStream(ms);
return returnImage
}
要使用WebControl显示动态创建的图像,您将需要处理程序在此处提供更多信息:
使用HTTP处理程序提供动态内容
, 如果您谈论的是SQL \的Image数据类型,那么这些图像以byte[]
格式存储,因此您将需要将数据库中的数据放入byte []变量中,然后使用FileStream
在您的fileSystem中创建一个新的临时Image文件,然后分配它可以应用于任何图像控件或您想要执行的任何操作。
您是否正在尝试将数据库中存储的图像分配给ASP.NET中的图像控件?
我不认为有任何方法可以将Byte []转换为System.Drawing
所以这是我使用的解决方案:
byte[] ImageData;
string filePath = @\"~\\Image.jpeg\"; //path or temporary Image
using (con)
{
con.Open();
SqlCommand getImageCmd = new SqlCommand(\"/* your SQL query to get Image from database*/ \",con);
ImageData = (byte[])getImageCmd.ExecuteScalar();
con.Close();
}
FileStream fs = new FileStream(filePath,FileMode.OpenOrCreate);
using (fs)
{
foreach (byte b in ImageData)
{
fs.WriteByte(b);
}
fs.Flush();
fs.Close();
}
ImageControl.ImageUrl = \"~/Image.jpeg\"; // assign that temp Image to Image Control
, 本文介绍如何创建一个Image控件,该控件将直接从内存中接受图像,而无需文件保存或处理程序。希望对您有所帮助。
http://www.eggheadcafe.com/tutorials/aspnet/e1a14e2c-e746-4bed-a552-24c632bd2709/aspnet-inmemory-image-control-with-builtin-resizing-of-posted-file.aspx