Слишком медленное создание скриншотов - C#
Формулировка задачи:
Мне нужно оптимизировать код. У меня в нескольких потоках постоянно узнается цвет конкретного пикселя на экране, но скорость вычисления цвета пикселя слишком медленная, подскажите пожалуйста как можно ускорить этот процесс.
class BitmapDropper : IDropper { public System.Windows.Media.Color GetColor() { Rectangle bounds = Screen.PrimaryScreen.Bounds; Bitmap bmp = new Bitmap(bounds.Width, bounds.Height); Graphics graph = Graphics.FromImage(bmp); graph.CopyFromScreen(0, 0, 0, 0, bmp.Size); var color = bmp.GetPixel(bounds.Width / 2, bounds.Height / 2); var mColor = new System.Windows.Media.Color() { A = 255, R = color.R, G = color.G, B = color.B }; return mColor; } }
Решение задачи: «Слишком медленное создание скриншотов»
textual
Листинг программы
class WinApiDropper : IDropper { public System.Windows.Media.Color GetColor() { Rectangle bounds = Screen.PrimaryScreen.Bounds; IntPtr hDC = GetDC(IntPtr.Zero); uint pixel = GetPixel(hDC, bounds.Width / 2, bounds.Height / 2); ReleaseDC(IntPtr.Zero, hDC); byte r = (byte)(pixel & 0x000000FF); byte g = (byte)((pixel & 0x0000FF00) >> 8); byte b = (byte)((pixel & 0x00FF0000) >> 16); var mColor = new System.Windows.Media.Color() { A = 255, R = r, G = g, B = b }; return mColor; } [DllImport("user32.dll")] public static extern IntPtr GetDC(IntPtr hwnd); [DllImport("user32.dll")] public static extern int ReleaseDC(IntPtr hwnd, IntPtr hDC); [DllImport("gdi32.dll")] public static extern uint GetPixel(IntPtr hDC, int x, int y); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д