[C#] Pixel-Erkennung bei der Maus

FloHoCH

Stammgast
Ich gebe zu, ich habe noch nicht lange gesucht, aber dieser Bereich ist noch sooo leer :)

Kann mir jemand sagen, wie ich mit C# das Pixel unter der Maus auslesen kann (Koordinaten sind nicht wichtig, ich brauche die Farbe)?

Das Ziel: Sobald sich das Pixel unter der Maus ändert (Start der Überprüfung soll mit einer Tastenkombination ausgelöst werden) wird ein Sound wiedergegeben. Oder ein einfaches beep, werd ich aber entscheiden, wenn es soweit ist. Das kann dan z.B. bei einer laufenden Installation verwendet werden.
 
@ FloHoCH: Es würde reichen wenn du das C++ File in ein VC++.NET umwandelst, oder umwandeln lässt... Danach kannst du es als DLL kompilieren (natürlich angepasst) und mit C# darauf zugreifen...
 

FloHoCH

Stammgast
Es würde reichen wenn du das C++ File in ein VC++.NET umwandelst, oder umwandeln lässt... Danach kannst du es als DLL kompilieren (natürlich angepasst) und mit C# darauf zugreifen...

Das ist mir jetzt ehrlich gesagt zu hoch. Applikationsprogrammierung ist recht Neuland für mich, aber trotzdem danke. Vielleicht ist es ja einfacher, als es sich anhört :)
 

coceira

Stammgast
Das ist mir jetzt ehrlich gesagt zu hoch. Applikationsprogrammierung ist recht Neuland für mich, aber trotzdem danke. Vielleicht ist es ja einfacher, als es sich anhört :)


sorry florian,

aus der fragestellung war nicht zu erkennen ob du auch mit anderen c-dialekten was anfangen kannst - ein nachteil der meisten foren - zu knappe eingangsinfo und dann ganz selten eine rueckmeldung ob's auch tuten tut ;-) (oder eben nicht !)

link182 hat bereits genuegend hinweise hinterlassen, so bleibt eigentlich nur die empfehlung (fuer den anfaenger) auch mal ein buch vom "alten" ansi-c aufzuschlagen, bei den grundlagen anfangen ist zwar immer etwas muehsamer aber es erleichtert spaeter den durchblick durch die ganzen dialekte.

C ist/soll eine genormte sprache sein......... (rofl)

gruss, co
 
A

abu

Guest
Beim durchleben all meiner Lernkurven war jeweils der mitgelieferte Beispiel-Code recht hilfreich. Um C# mache ich (derzeit noch) einen Bogen, aber ich nehme an, dass auch dort Beispiele zur Verfügung stehen. Und der Tip mit dem Buch ist sowieso empfehlenswert.

C ist/soll eine genormte sprache sein......... (rofl)

Hat das hier einer gesagt? Da fällt doch eindeutig in die Kategorie "Gerüchte & Aberglauben" :)
 
C ist/soll eine genormte sprache sein......... (rofl)

gruss, co

Jap ist es ;)
genauso wie C++ und C#...


@ FloHoCH: Der Quelltext den du im Link hast ist C++. Wenn ein jemand den du kennst VC++ und C++ beherrscht, dann kannst du ihn den C++ QT in einen VC++ QT umwandeln lassen, wenn er Zeit hat...

Um mit C# dann darauf zugreifen zu können solltest du dann den VC++ QT in eine DLL kompilieren (Merk dir die Methodennamen, bzw. diese wirst du als Verweis brauchen)... Schreibe anschliessend mit C# das Programm dass du möchtest... und überall wo du diese MausOver-Pixel Methode brauchst, verweist du auf die VC++ DLL...

Der Vorteil unter .NET: VC++, VB.NET, C# und VJ# können beispielsweise alle aufeinander zugreifen...
 

coceira

Stammgast
versuchs mal damit .....................


- 1x1 pixel direct unter dem cursor lesen
- in ein byte array kopieren - rgb wert auslesen
- 4 bytes pro pixel fuer den farbwert und 1 byte fuer alpha

Code:
private byte[] pixels;
     public Window1()
          {
               InitializeComponent();           
                    wheel.MouseMove += new MouseEventHandler(wheel_MouseMove);         
          }
          void wheel_MouseMove(object sender, MouseEventArgs e)
          {
               try
               {
                    CroppedBitmap cb = new CroppedBitmap(wheel.Source as BitmapSource, new Int32Rect((int)Mouse.GetPosition(this).X, (int)Mouse.GetPosition(this).Y, 1, 1));
                    pixels = new byte[4];
                    try
                    {
                         cb.CopyPixels(pixels, 4, 0);
                    }
                    catch (Exception ex)
                    {
                         MessageBox.Show(ex.Message);
                    }
                    Console.WriteLine(pixels[0] + ":" + pixels[1] + ":" + pixels[2] + ":" + pixels[3]);
                    rec.Fill = new SolidColorBrush(System.Windows.Media.Color.FromRgb(pixels[2], pixels[1], pixels[0]));
               }
               catch (Exception exc)
               {
               }
          }
______
LINK182: Wenn du das CODE Attribut benutzt werden auch deine Eingaben richtig erkannt.

aiatolla - sieht gleich viel huebscher aus - naechstes mal dann .......tnx
 
Zuletzt bearbeitet:
Oben