0

我有以下问题:我正在使用 c# 和 .aspx 页面。在 .aspx 页面上,我有一个 GridView。我将 GridView 数据源设置为:

GridView1.DataSource = PictureInfo.PictureInfoList;

我的“PictureInfo”类如下所示:

public class PictureInfo
{

    public static List<PictureInfo> PictureInfoList = new List<PictureInfo>();

    public string PictureDescription { get; set; }
    public byte[] Picture { get; set; }
}

是否有可能以及如何在 GridView 中显示“字节 [] 图片”中的图片?或者哪种方式可行?在将数据发送到数据库之前,我正在以这种方式保存数据。我想在将它发送到数据库之前在 GridView 中显示它。如您所见,我是初学者,但如果我能完成这项工作,我会非常高兴。我的头脑已经从网上阅读了一些解决方案,直到现在都没有帮助。

非常感谢您

4

3 回答 3

0

在你的 handler.ashx

public void ProcessRequest(HttpContext context)

{

 context.Response.ContentType = "image/jpeg";
 string ImageID=request["ID"];
 //byte[] ImageByte=pictureInfo.Picture;//local imageByte
 byte[] ImageByte=getImage(ImageId);//image byte from any other sour,e.g database
 Stream strm = new MemoryStream(ImageByte));
 long length = strm.Length;
 byte[] buffer = new byte[length];
 int byteSeq = strm.Read(buffer, 0, 2048);

 while (byteSeq > 0)
 {
       context.Response.OutputStream.Write(buffer, 0, byteSeq);
       byteSeq = strm.Read(buffer, 0, 2048);
  }

}

现在 为您的 asp:image 在 gridview 中设置图像 url,如下所示

Image1.ImageUrl = "somthing.ashx?ID="+userImageID;

我希望你有唯一的 id 让你的图像可见。我希望你现在已经准备好了。评论和查询来得很好。

从数据库中检索图像字节

public  byte[] GetImage(string ImageId)
{ byte[] img = null;
DataTable dt = new DataTable();
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "SlikaHendler";
cmd.Parameters.AddWithValue("@Id", ImageId);
cmd.Connection = yourConnection();
SqlDataReader dr = null;
dr = cmd.ExecuteReader();
if (dr.Read())
{
    img = (byte[])dr[0];
}
dr.Close();
return img;//returns array of byte
}
于 2013-07-07T14:46:31.583 回答
0

我建议你一个解决方案:转换byte[]Bitmap(可能对你有用):

public BitmapSource ByteArrayToBitmap(byte[] byteArray) {
    BitmapSource res;
    try {
        using (var stream = new MemoryStream(byteArray)) {
            using (var bmp = new Bitmap(stream)) {
                res = ToBitmap(bmp);
            }
        }
    } catch {
        res = null;
    }
    return res;
}

public BitmapSource ToBitmap(Bitmap bitmap) {
    using (var stream = new MemoryStream()) {
        bitmap.Save(stream, ImageFormat.Bmp);

        stream.Position = 0;
        var result = new BitmapImage();
        result.BeginInit();     
        result.CacheOption = BitmapCacheOption.OnLoad;
        result.StreamSource = stream;
        result.EndInit();
        result.Freeze();
        return result;
    }
}

接下来,您应该适应并将其包含Bitmap在您的GridView.

于 2013-07-12T10:16:13.430 回答
-1

我知道图片被记录为数据库的二进制文件。在这方面,您的问题转向“将二进制转换为字节”。

如果您可以将图片信息作为二进制数据获取,则可以将其转换为 1 个字节的 3 位数字,并将其转换并显示为字节。

http://en.wikipedia.org/wiki/ASCII

于 2013-06-27T20:09:34.973 回答