【问题标题】:how to get the RGB value of a pixel inside the Form workspace如何获取表单工作区中像素的 RGB 值
【发布时间】:2009-11-20 08:59:06
【问题描述】:

我正在创建一个宏,需要检查一些像素以确保鼠标点击正确的位置。你会如何检查 c# 中像素的 RGB 值?

【问题讨论】:

    标签: c# macros rgb pixel


    【解决方案1】:

    如果您正在查看位图的 RGB 值,

    using (Bitmap bitmap = new Bitmap(img))
    {
    Color color = bitmap.GetPixel(0, 0);
    MessageBox.Show(color.R.toString() + color.G.toString() + color.B.toString());
    }
    

    【讨论】:

      【解决方案2】:

      经过大量测试,这就是我最终得到的结果。

      using System;
      using System.Collections.Generic;
      using System.ComponentModel;
      using System.Data;
      using System.Drawing;
      using System.Linq;
      using System.Text;
      using System.Windows.Forms;
      using System.Runtime.InteropServices;
      using System.Text.RegularExpressions;
      
      
      namespace Color_tool
      {
      public partial class Form1 : Form
      {
          Regex rgbInputR;
          Regex rgbInputG;
          Regex rgbInputB;
      
          Match R, G, B;
          int r;
          int g;
          int b;
      
      
          string colorX;
      
          [DllImport("gdi32")]
          private static extern int GetPixel(IntPtr hdc, int x, int y);
          [DllImport("User32")]
          private static extern IntPtr GetWindowDC(IntPtr hwnd);
      
          private static readonly IntPtr DesktopDC = GetWindowDC(IntPtr.Zero);
      
          public static System.Drawing.Color GetPixelAtCursor()
          {
              System.Drawing.Point p = Cursor.Position;
              return System.Drawing.Color.FromArgb(GetPixel(DesktopDC, p.X, p.Y));
          }
      
          public Form1()
          {
              InitializeComponent();
          }
      
          private void Form1_Load(object sender, EventArgs e)
          {
              button1.BackColor = Color.Black;
          }
      
          private void timer1_Tick(object sender, EventArgs e)
          {
              colorX = GetPixelAtCursor().ToString();
              Color backX = GetPixelAtCursor();
              this.BackColor = Color.FromArgb(r,g,b);
              label1.Text = colorX;
              RGB_value();
          }
      
          private void button1_Click(object sender, EventArgs e)
          {
              if (timer1.Enabled == false)
                  timer1.Enabled = true;
              else
                  timer1.Enabled = false;
          }
      
          private void RGB_value()
          {
              rgbInputR = new Regex(@"(?<=R=)\d{0,3}");
              rgbInputG = new Regex(@"(?<=G=)\d{0,3}");
              rgbInputB = new Regex(@"(?<=B=)\d{0,3}");
      
              Match R, G, B;
      
              R = rgbInputR.Match(colorX);
              G = rgbInputG.Match(colorX);
              B = rgbInputB.Match(colorX);
              //had to flip the R and B ???
              b = int.Parse(R.Groups[0].Value);
              g = int.Parse(G.Groups[0].Value);
              r = int.Parse(B.Groups[0].Value);
          }
       }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-10
        • 2010-09-13
        • 2010-11-08
        • 1970-01-01
        • 2023-03-24
        相关资源
        最近更新 更多