我在制作远程桌面共享应用程序,在该应用程序中捕获桌面图像并压缩它并将其发送到接收器。为了压缩图像,我需要将它转换为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并且还可以使用最多资源(慢下来),以及产生不同的压缩结果。我已阅读使用Marshal.Copy和memcpy,但我无法理解他们。
那么有没有其他方法可以达到这个目标?
两者的MemoryStream和图像具有Dispose方法是有用的,确保你正在处理它们,因为这会导致MemoryLeaks。 – abc123
@ abc123:你不需要处理一个'MemoryStream';它是一个完全托管的资源,除非您在远程处理中使用它。在这两种情况下,处置资源都是不恰当的。 –
@JonSkeet有趣,你有没有做过一个基准?查看.net释放对象的速度?我知道DataTable有类似的参数,但GarbageCollector收集使用dispose时分配的内存的速度有明显的差异。 – abc123