john1990_1 Ответов: 2

Как получить пиксельный цвет в графике?


Я сделал

private void FormMario_Shown(object sender, EventArgs e)
        {
            g = CreateGraphics();
        }


а потом я хочу ... :

г. метода getpixel(X,у);

как это сделать?

2 Ответов

Рейтинг:
7

john1990_1

Я нашел это где-то, поэтому я использовал объект формы в качестве элемента управления

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);
            }
        }


    }
}




Это лучше для GetPixel:
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);
          }
      }


Sergey Alexandrovich Kryukov

Я уже собирался сказать: "вы официально приняли худший из всех ответов", но позже заметил, что вы приняли свой собственный ответ. Ну, таким образом, вы можете принять все, что угодно. Я назову это "жульничеством".

Я бы начал с вопроса: зачем вообще использовать "CreateGraphics"? Чего вы хотите достичь?

—СА

Implements Master Yoda

Я нахожу это глупым, когда предположительно опытный программист ставит под сомнение мотив ops для того, чтобы задать вопрос... возможно, они ответили на свой собственный вопрос, лишенный какой-либо приемлемой альтернативы или жизнеспособного направления? Помощь и направление-это сфера охвата или главная идея здесь, в проекте кода, а не вынесение суждений и, конечно же, не оскорбление другого. Не предлагая альтернативу или полезный совет opp, вы ставите свои комментарии под сомнение.

Ответ opp является разумным для начала и обеспечивает отправную точку для решения их проблемы. Из-за отсутствия контекста использования альтернатива невозможна.

john1990_1

Я хочу установить и получить пиксели с помощью системы.Рисование.Графика не растровая, чтобы установить и получить цвета отдельных пикселей на моей форме, я использовал ее сейчас, и она работает потрясающе!!! EDIT: нашел лучший способ и добавил его к ответу.

Рейтинг:
2

Thomas Daniels

Это невозможно из самого графического объекта. Однако, если графика привязана к Растровому изображению, вы можете использовать GetPixel метод растрового изображения:

Color c = bmp.GetPixel(x, y);


Sergey Alexandrovich Kryukov

Видите ли, мы не знаем, использует ли исследователь какое-либо растровое изображение. Что делать, если нет никаких растровых изображений? Я бы подошел к этому по-другому, спросив о цели всей этой деятельности. Я подозреваю, что все это не имеет никакого смысла.
—СА