時,我有一個服務器 - 客戶端應用程序,我想從服務器獲取一個屏幕截圖,但上線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