时,我有一个服务器 - 客户端应用程序,我想从服务器获取一个屏幕截图,但上线bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
我得到这个异常:A generic error occurred in GDI+.
Image.Save异常“GDI +中发生了一般性错误”。保存到的MemoryStream
private Socket ScreenSocket;
private MemoryStream ms;
public void ConnectScreenShot(IPEndPoint ep)
{
if (ScreenSocket != null)
{
ScreenSocket.Dispose();
ScreenSocket = null;
}
if (ms != null)
{
ms.Dispose();
ms = null;
}
ScreenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
ScreenSocket.Connect(ep);
ms = new MemoryStream();
Rectangle bounds = Screen.GetBounds(Point.Empty);
using (Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height))
{
using (Graphics g = Graphics.FromImage(bitmap))
{
g.CopyFromScreen(Point.Empty, Point.Empty, bitmap.Size);
}
bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
}
}
这是为什么发生的事情,以及如何我会修复它吗?
更新:它的工作原理,当我使用ImageFormat.Jpeg
相反的ImageFormat.Png
,但我仍然需要一个PNG格式。
不确定这是否有帮助。但是,你能不能在你的'CopyFromScreen'后面传回Graphics对象?或者你的方法必须是无效的?或者实际上也许只是你的Bitmap对象。 – meanbunny
@meanbunny我不知道如果我有你的观点,但CopyFromScreen不是我的方法,它的Graphics.CopyFromScreen方法! –
正确的我想我的观点是你打算如何将你的位图传回给你的客户,如果这是你的意图。无论这里是一个可以帮助你的帖子。 http://forums.asp.net/t/1766006.aspx/1 – meanbunny