Announcement

Collapse
No announcement yet.

Farbpixel auslesen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Farbpixel auslesen

    Hallo!
    Ich probiere den Farbwert eines bestimmten Pixels vom gerade sichtbaren Bild auf dem Desktop auszulesen. Ich möchte sozusagen ein Tool haben was mir den Farbwert anzeigt, welcher sich gerade unter der Mauszeigerposition befindet.

    Die erste Möglichkeit die ich versucht habe, war es ein Screenshot zu machen in einem Bitmap zu speichern von dort an den Pixel zu gelangen. Das war aber nicht ganz so optimal, da ich diese Methode per Timer aufrufe um der Mausbewegung zu folgen.

    Dann wollte ich mir den Desktop als Graphics Objekt verfügbar machen, in der Hoffung, dass etwas performanter läuft. Die Idee funktionierte, nur komme ich da nicht an die Pixel ran sondern kann nur darauf malen. :/

    Habt ihr evtl einen Vorschlag, wie ich da am besten vorgehen kann?

    Danke!
    -Marco

  • #2
    So, Problem ansatzweise gelöst aber....

    Code:
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;
    
    
    namespace ColorChecker
    {
        public partial class Form1 : Form
        {
          
    
            [DllImport("gdi32.dll", EntryPoint = "GetPixel")]
            public static extern Int32 GetPixel(IntPtr hdc, Int32 x, Int32 y);
    
            [DllImport("user32.dll", EntryPoint = "GetDC")]
            public static extern IntPtr GetDC(IntPtr ptr);
    
            IntPtr desktop;
    
            public Form1()
            {
                InitializeComponent();
    
                desktop = GetDC(IntPtr.Zero);
                
            }
    
    
            private void button1_Click(object sender, EventArgs e)
            {
                Point p = MousePosition;
    
                label1.Text = Convert.ToString(p.X);
                label2.Text = Convert.ToString(p.Y);
    
                int color = GetPixel(desktop, p.X, p.Y);
                int rot  = color & 0x0000FF;
                int gruen = (color & 0x00FF00) >> 8;
                int blau = (color & 0xFF0000) >> 16;
    
                pictureBox1.BackColor = Color.FromArgb(rot, gruen, blau);
             
            }
    
            private void timer1_Tick(object sender, EventArgs e)
            {
                button1_Click(sender, e);
            }
        }
    }
    Obwohl ich hier kein Speicherleck sehe, steigt der verwendete Speicher immer weiter je länger ich das Programm laufenlasse. Woran kann das denn liegen?

    Comment

    Working...
    X