Считывание цвета пикселя с экрана. Выбрать наиболее оптимальный код из двух предложенных - C#
Формулировка задачи:
Возникла потребность считывать цвет пикселя, сейчас приведу 2 подхода к решению етой задачи.
При чем частота вызовов метода вариируеться(от 1 до 20) раз в секунду.
От вас требуеться обоснованный ответ на вопрос "какой из методов быстрее при многократном вызове?".
, спасибо
[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);IntPtr hDC = GetDC(IntPtr.Zero); uint pixel = GetPixel(hDC, x, y); ReleaseDC(IntPtr.Zero, hDC);byte r = (byte)(pixel & 0x000000FF); byte g = (byte)((pixel & 0x0000FF00) >> 8); byte b = (byte)((pixel & 0x00FF0000) >> 16);
Ilya81
static Color GetPixel(Point position) { using (var bitmap = new Bitmap(1, 1)) { using (var graphics = Graphics.FromImage(bitmap)) { graphics.CopyFromScreen(position, new Point(0, 0), new Size(1, 1)); } return bitmap.GetPixel(0, 0); } }
Решение задачи: «Считывание цвета пикселя с экрана. Выбрать наиболее оптимальный код из двух предложенных»
textual
Листинг программы
using System; using System.Diagnostics; using System.Drawing; using System.Runtime.InteropServices; class Program { [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); static Color GetPixel(Point position) { using (var bitmap = new Bitmap(1, 1)) { using (var graphics = Graphics.FromImage(bitmap)) { graphics.CopyFromScreen(position, new Point(0, 0), new Size(1, 1)); } return bitmap.GetPixel(0, 0); } } static void Main(string[] args) { Stopwatch sw = new Stopwatch(); sw.Start(); for (int i = 0; i < 10; i++) GetPixel(new Point(i, i)); sw.Stop(); Console.WriteLine("{0}:{1}", sw.Elapsed.Seconds, sw.Elapsed.Milliseconds); sw.Reset(); sw.Start(); for (int i = 0; i < 10; i++) { IntPtr dc = GetDC(IntPtr.Zero); GetPixel(dc, i, i); ReleaseDC(IntPtr.Zero, dc); } sw.Stop(); Console.WriteLine("{0}:{1}", sw.Elapsed.Seconds, sw.Elapsed.Milliseconds); Console.ReadKey(true); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д