Слишком медленное создание скриншотов - 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);
 
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.143 из 5
Похожие ответы