首页 > 解决方案 > 将图像转换为字节并返回

问题描述

我知道已经有很多关于这个主题的帮助,但是使用这个帮助我遇到了一个问题:我有一个带有图标的图像列表,这些图标显示在 Windows 窗体的树视图中并且有效。

现在我想把这些图标放在一个表格中,清除图像列表,然后从表格中加载图像列表。这是为了测试我是否可以使用表格来维护图标。

问题是使用此方法的图标显示黑色背景。我使用BytesFromImage写入表中的Image列并将ImageFromStream数据StreamFromBytes读回图像。

我错过了什么?

public static byte[] BytesFromImage(Image TheImage)
{
    MemoryStream ms = new MemoryStream();
    TheImage.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
    return ms.ToArray();
}

public static Stream StreamFromBytes(byte[] DataBytes)
{
    MemoryStream stream = new MemoryStream();
    stream.Write(DataBytes, 0, DataBytes.Length);
    stream.Seek(0, SeekOrigin.Begin);
    return stream;
}

public static Image ImageFromStream(Stream DataStream)
{
    return Bitmap.FromStream(DataStream);
}

标签: c#

解决方案


实际上,您的代码没有任何问题。问题是格式规范。当我尝试将我从 Photoshop 创建的 PNG 格式的图像转换为 JPEG/JPG 时,我遇到了这个问题。根据Microsoft等流行文档,PNG 图像保留了图像信息的高度细节,而 JPG 则没有。当您想要压缩具有高过渡边界的图像时,JPEG 不适合作为压缩选项。尤其是从 PNG 移植到 JPEG 时。你总会注意到这一点。我认为问题在于您使用的是原始位图。尝试将其解析为Image而不是,Bitmap看看这是否有效

Image image = System.Drawing.Image.FromStream(stream);

推荐阅读