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