我有两个功能:
功能1:ImageToByteArray:用于将图像转换为字节数组,然后在BLOB字段中存储在Oracle数据库中。
public byte[] ImageToByteArray(string sPath)
{
byte[] data = null;
FileInfo fInfo = new FileInfo(sPath);
long numBytes = fInfo.Length;
FileStream fStream = new FileStream(sPath, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fStream);
data = br.ReadBytes((int)numBytes);
return data;
}
功能2:ByteArrayToImage:用于将字节数组从数据库转换为图像:
public System.Drawing.Image ByteArrayToImage(byte[] byteArray)
{
MemoryStream img = new MemoryStream(byteArray);
System.Drawing.Image returnImage = System.Drawing.Image.FromStream(img);
return returnImage;
}
在我的标记中,我有一个Imgage控件:
<asp:Image ID="Image1" runat="server" />
在Code Behind中我想将函数2的返回值分配给( System.Drawing.Image 类型)到“image1”控件的类型( System.Web.UI.WebControls.Image )。
显然我不能只指定:
image1 = ByteArrayToImage(byteArray);
因为我收到以下错误:无法将类型'System.Drawing.Image'隐式转换为'System.Web.UI.WebControls.Image'
有没有这样做?
答案 0 :(得分:3)
你做不到。 WebControls.Image只是图像URL的HTML容器 - 您无法将图像数据直接存储在其中,只需将引用(url)存储到图像文件中。
如果您需要动态检索图像数据,通常的方法是创建一个处理请求的图像处理程序,并将图像作为浏览器可以显示的流返回。
请参阅此question
答案 1 :(得分:2)
看起来你只想要一个简单的方法将图像字节数组转换成图片。没问题。我发现article给了我很多帮助。
System.Web.UI.WebControls.Image image = (System.Web.UI.WebControls.Image)e.Item.FindControl("image");
if (!String.IsNullOrEmpty(currentAd.PictureFileName))
{
image.ImageUrl = GetImage(currentAd.PictureFileContents);
}
else
{
image.Visible = false;
}
//The actual converting function
public string GetImage(object img)
{
return "data:image/jpg;base64," + Convert.ToBase64String((byte[])img);
}
PictureFileContents是一个Byte [],它是GetImage作为对象的函数。
答案 2 :(得分:0)
我认为这是可能的,我希望它有所帮助。我的解决方案是:
public System.Web.UI.WebControls.Image HexStringToWebControlImage(string hexString)
{
var imageAsString = HexString2Bytes(hexString);
MemoryStream ms = new MemoryStream();
ms.Write(imageAsString, 0, imageAsString.Length);
if (imageAsString.Length > 0)
{
var base64Data = Convert.ToBase64String(ms.ToArray());
return new System.Web.UI.WebControls.Image
{
ImageUrl = "data:image/jpg;base64," + base64Data
};
}
else
{
return null;
}
}
public byte[] HexString2Bytes(string hexString)
{
int bytesCount = (hexString.Length) / 2;
byte[] bytes = new byte[bytesCount];
for (int x = 0; x < bytesCount; ++x)
{
bytes[x] = Convert.ToByte(hexString.Substring(x * 2, 2), 16);
}
return bytes;
}