Как получить пиксельный цвет в графике?
Я сделал
private void FormMario_Shown(object sender, EventArgs e) { g = CreateGraphics(); }
а потом я хочу ... :
г. метода getpixel(X,у);
как это сделать?
private void FormMario_Shown(object sender, EventArgs e) { g = CreateGraphics(); }
Я нашел это где-то, поэтому я использовал объект формы в качестве элемента управления
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Drawing; using System.Runtime.InteropServices; using System.Windows.Forms; namespace OSOL_NAMESPACE { class ClassSetGetPixel { [DllImport("user32.dll")] static extern IntPtr GetDC(IntPtr hWnd); [DllImport("user32.dll")] static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC); [DllImport("gdi32.dll")] static extern int GetPixel(IntPtr hDC, int x, int y); [DllImport("gdi32.dll")] static extern int SetPixel(IntPtr hDC, int x, int y, int color); static public Color GetPixel(Control control, int x, int y) { Color color = Color.Empty; if (control != null) { IntPtr hDC = GetDC(control.Handle); int colorRef = GetPixel(hDC, x, y); color = Color.FromArgb( (int)(colorRef & 0x000000FF), (int)(colorRef & 0x0000FF00) >> 8, (int)(colorRef & 0x00FF0000) >> 16); ReleaseDC(control.Handle, hDC); } return color; } static public void SetPixel(Control control, int x, int y, Color color) { if (control != null) { IntPtr hDC = GetDC(control.Handle); int argb = color.ToArgb(); int colorRef = (int)((argb & 0x00FF0000) >> 16) | (int)(argb & 0x0000FF00) | (int)((argb & 0x000000FF) << 16); SetPixel(hDC, x, y, colorRef); ReleaseDC(control.Handle, hDC); } } } }
static Color GetPixel(Point p) { using (var bitmap = new Bitmap(1, 1)) { using (var graphics = Graphics.FromImage(bitmap)) { graphics.CopyFromScreen(p, new Point(0, 0), new Size(1, 1)); } return bitmap.GetPixel(0, 0); } }
Я уже собирался сказать: "вы официально приняли худший из всех ответов", но позже заметил, что вы приняли свой собственный ответ. Ну, таким образом, вы можете принять все, что угодно. Я назову это "жульничеством".
Я бы начал с вопроса: зачем вообще использовать "CreateGraphics"? Чего вы хотите достичь?
—СА
Я нахожу это глупым, когда предположительно опытный программист ставит под сомнение мотив ops для того, чтобы задать вопрос... возможно, они ответили на свой собственный вопрос, лишенный какой-либо приемлемой альтернативы или жизнеспособного направления? Помощь и направление-это сфера охвата или главная идея здесь, в проекте кода, а не вынесение суждений и, конечно же, не оскорбление другого. Не предлагая альтернативу или полезный совет opp, вы ставите свои комментарии под сомнение.
Ответ opp является разумным для начала и обеспечивает отправную точку для решения их проблемы. Из-за отсутствия контекста использования альтернатива невозможна.
Я хочу установить и получить пиксели с помощью системы.Рисование.Графика не растровая, чтобы установить и получить цвета отдельных пикселей на моей форме, я использовал ее сейчас, и она работает потрясающе!!! EDIT: нашел лучший способ и добавил его к ответу.
Это невозможно из самого графического объекта. Однако, если графика привязана к Растровому изображению, вы можете использовать GetPixel
метод растрового изображения:
Color c = bmp.GetPixel(x, y);
Видите ли, мы не знаем, использует ли исследователь какое-либо растровое изображение. Что делать, если нет никаких растровых изображений? Я бы подошел к этому по-другому, спросив о цели всей этой деятельности. Я подозреваю, что все это не имеет никакого смысла.
—СА