为了账号安全,请及时绑定邮箱和手机立即绑定

将图像转换为字节数组的最快方法

将图像转换为字节数组的最快方法

C#
子衿沉夜 2019-12-26 10:06:20
我正在制作远程桌面共享应用程序,在该应用程序中,我捕获了桌面的图像并将其压缩并将其发送到接收器。要压缩图像,我需要将其转换为byte []。目前,我正在使用此:public byte[] imageToByteArray(System.Drawing.Image imageIn){    MemoryStream ms = new MemoryStream();    imageIn.Save(ms,System.Drawing.Imaging.ImageFormat.Gif);    return  ms.ToArray();}public Image byteArrayToImage(byte[] byteArrayIn){     MemoryStream ms = new MemoryStream(byteArrayIn);     Image returnImage = Image.FromStream(ms);     return returnImage;}但是我不喜欢它,因为我必须将其保存在ImageFormat中,这可能还会消耗资源(Slow Down)以及产生不同的压缩结果。我已经阅读过使用Marshal.Copy和memcpy的内容,但是我无法了解他们。那么还有其他方法可以实现这一目标吗?
查看完整描述

3 回答

?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

那么还有其他方法可以实现这一目标吗?


不能。为了将图像转换为字节数组,您必须指定图像格式-就像将文本转换为字节数组时必须指定编码一样。


如果您担心压缩伪影,请选择一种无损格式。如果您担心CPU资源,请选择一种不会压缩的格式-例如,仅原始ARGB像素。但这当然会导致更大的字节数组。


请注意,如果选择了包含压缩的格式,则随后压缩字节数组毫无意义-几乎可以肯定没有任何效果。


查看完整回答
反对 回复 2019-12-26
?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

有Image参数的RawFormat属性,该属性返回图像的文件格式。您可以尝试以下方法:


// extension method

public static byte[] imageToByteArray(this System.Drawing.Image image)

{

    using(var ms = new MemoryStream())

    {

        image.Save(ms, image.RawFormat);

        return ms.ToArray();

    }

}


查看完整回答
反对 回复 2019-12-26
?
12345678_0001

TA贡献1802条经验 获得超5个赞

由于乔恩·斯凯特(Jon Skeet)指出的原因,我不确定您是否会获得巨大收益。但是,您可以尝试对TypeConvert.ConvertTo方法进行基准测试,并查看它与使用当前方法的比较。


ImageConverter converter = new ImageConverter();

byte[] imgArray = (byte[])converter.ConvertTo(imageIn, typeof(byte[]));


查看完整回答
反对 回复 2019-12-26
  • 3 回答
  • 0 关注
  • 582 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信