我正在制作远程桌面共享应用程序,在该应用程序中,我捕获了桌面的图像并将其压缩并将其发送到接收器。要压缩图像,我需要将其转换为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)以及产生不同的压缩结果。了解他们。
那么还有其他方法可以实现这一目标吗?
MemoryStream和Image都具有dispose方法,请确保要对其进行处置,因为这可能导致MemoryLeaks。
—
abc123 2013年
@ abc123:您不需要处理
—
乔恩·斯基特
MemoryStream
; 它是一个完全托管的资源,除非您在远程处理中使用它。在这两种情况下,处置资源都是不合适的。
@JonSkeet有趣,您是否为此做了基准测试?看看.net释放对象的速度?我知道DataTable也有类似的论点,但是GarbageCollector收集使用处理时分配的内存的速度存在明显差异。
—
abc123 2013年
@ abc123:我真的不希望有-处理流对数组没有任何作用,MemoryStream没有终结器(不同于DataTable,后者从MarshalByValueComponent继承了其中一个)。
—
乔恩·斯基特
有完整源代码的最终解决方案吗?
—
Kiquenet