Слишком медленное создание скриншотов - 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);
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д