c# - 将图像转换为字节并返回
问题描述
我知道已经有很多关于这个主题的帮助,但是使用这个帮助我遇到了一个问题:我有一个带有图标的图像列表,这些图标显示在 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);
}
解决方案
实际上,您的代码没有任何问题。问题是格式规范。当我尝试将我从 Photoshop 创建的 PNG 格式的图像转换为 JPEG/JPG 时,我遇到了这个问题。根据Microsoft等流行文档,PNG 图像保留了图像信息的高度细节,而 JPG 则没有。当您想要压缩具有高过渡边界的图像时,JPEG 不适合作为压缩选项。尤其是从 PNG 移植到 JPEG 时。你总会注意到这一点。我认为问题在于您使用的是原始位图。尝试将其解析为Image
而不是,Bitmap
看看这是否有效
Image image = System.Drawing.Image.FromStream(stream);
推荐阅读
- android - 如何让经过 Play Protect 验证的应用程序侧载在应用程序中?
- javascript - 在 React 应用程序中添加预加载器
- pine-script - 带有止损买单的 RSI 指标
- python - 在 Amadeus python SDK 中将多个参数传递给酒店优惠搜索
- sql - Oracle - 根据上一列和下一列计数
- android - Firebase 数据库不写
- php - Json_encode 给出无效的 JSON
- angular - og 标签链接预览在 instagram Messenger 中无法始终如一地工作
- .net - 旧的 VB6 MSComm 控件如何与串行端口通信以及 .Net SerialPort 如何做到这一点之间是否存在重大差异?
- flutter - 我正在制作通讯录应用程序,但是当我保存联系人时,未显示姓名