[英]c# remote desktop connection resolution
我正在編寫類似於TeamViewer的程序。 但是我有一個問題,就是屏幕分辨率太大。 如何降低傳入圖片的質量?
byte[] ScreenShut()
{
Bitmap bmp = new Bitmap(Screen.PrimaryScreen.Bounds.Width,Screen.PrimaryScreen.Bounds.Height);
Graphics gr = Graphics.FromImage(bmp);
bmp.SetResolution(96.0F,96.0F);
gr.CopyFromScreen(0, 0, 0, 0, new Size(bmp.Width, bmp.Height));
MemoryStream ms = new MemoryStream();
bmp.Save(ms, ImageFormat.Png);
return ms.GetBuffer();
}
從graphics.CopyFromScreen()創建一個位圖,然后創建另一個位圖來縮放,浪費了太多的CPU。
[DllImport("user32")] static extern int GetDC(int hWnd);
[DllImport("user32")] static extern int ReleaseDC(int hwnd, int hDC)
[DllImport("gdi32")] static extern int StretchBlt(int hdc, int x, int y, int nWidth, int nHeight, int hSrcDC, int xSrc, int ySrc, int nSrcWidth, int nSrcHeight, int dwRop);
int W = Screen.PrimaryScreen.Bounds.Width;
int H = Screen.PrimaryScreen.Bounds.Height;
int dW = W * 2 / 3; // 66%
int dH = H * 2 / 3; // 66%
Bitmap img = new Bitmap(dW, dH);
Graphics g = Graphics.FromImage(img);
var dc = g.GetHdc();
var screen = GetDC(0);
StretchBlt(dc.ToInt32(), 0, 0, dW, dH, screen, 0, 0, W, H, 0xCC0020);
g.ReleaseHdc(dc) ;
ReleaseDC(0, screen)
img.Save(@"C:\123.png", ImageFormat.Jpeg);
縮放圖像后,文本將變得難以閱讀。 縮放比例應為75%左右,然后使用JPG壓縮格式減小尺寸, 請參見此處 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.