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