Toon posts:

[c#] Kleur onder cursor van waar dan ook

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil graag mn eigen tooltje maken om de kleur van een pixel die ik aanwijs te krijgen (net als de photoshop functie).
Ik krijg het voor elkaar dat hij registreert waar de muis is en alles, alleen krijg ik het niet voor elkaar de kleur te detecteren.

Weet iemand hoe?
Of geef me in ieder geval het goede duwtje in de rug ik vindt het ook leuk om zelf te ontdekken maar ben hier nu al een poosje mee bezig en heb dus wat hulp nodig ;)

  • whoami
  • Registratie: December 2000
  • Laatst online: 17:29
Kan je niets doen met de GetPixel method ?
Dit is wel een member method van Bitmap, dus je zult de locatie waar je klikt ofzo in een bitmap moeten laden en dan de GetPixel op die bitmap moeten toepassen met de juiste coördinaten.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Ja daar zat ik ook al aan te denken om een bitmap zo groot als de resolutie te maken (dus eigenlijk van het scherm) en het daar van af te lezen ofzo?

  • Da Fox
  • Registratie: Juni 2004
  • Laatst online: 16-01 18:01
dan moet je die bitmap wel steeds updaten
Kan wel als je alleen de kleur wilt weten waar je klikt, maar makkelijker is mss
als je constant de kleur onder je cursor ziet

"Man fears the darkness, and so he scrapes away at the edges of it with fire." - Rei Ayanami


Verwijderd

Topicstarter
hmm ja inderdaad maar hoe doet bijv Photoshop dat dan? Die doet zodra je eroverheen gaat update ie het vakje zodat je kan zien welke kleur je wilt hebben.
Dus het moet wel goed mogelijk zijn?

  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 14:59

pjvandesande

GC.Collect(head);

Je kan bij elke mouse move als het waren een screenshot maken, en dan met de positie van de muis de pixel color opvragen.

Verwijderd

Gebruik win32. Het .NET framework biedt niet echt een leuk alternatief voor de win32 call. Ik weet niet hoe het met .NET 2.0 zit maar daar kun je nu toch niet zoveel mee :)


code:
1
2
[DllImport("gdi32.dll",EntryPoint="GetPixel",ExactSpelling=false,CharSet=CharSet.Ansi,SetLastError=true)]
        static extern int GetPixel(IntPtr hdc, int xPos, int yPos);

[ Voor 10% gewijzigd door Verwijderd op 20-10-2004 20:53 ]


Verwijderd

Topicstarter
Verwijderd schreef op 20 oktober 2004 @ 12:56:
Gebruik win32. Het .NET framework biedt niet echt een leuk alternatief voor de win32 call. Ik weet niet hoe het met .NET 2.0 zit maar daar kan je nu toch niet zoveel mee :)


code:
1
2
[DllImport("gdi32.dll",EntryPoint="GetPixel",ExactSpelling=false,CharSet=CharSet.Ansi,SetLastError=true)]
        static extern int GetPixel(IntPtr hdc, int xPos, int yPos);
Als ik dit gebruik krijg ik een:

The type or namespace name 'DllImport' could not be found (are you missing a using directive or an assembly reference?)

- edit -

Woeps dan moet ik natuurlijk wel een

using System.Runtime.InteropServices;

eraan toevoegen :9

[ Voor 12% gewijzigd door Verwijderd op 20-10-2004 13:03 ]


Verwijderd

Dat klopt. Je hebt "using System.Runtime.InteropServices;" nodig.

Maar ook nu ben je er nog niet. Je zal toch echt even MSDN er op na moeten slaan.

Verwijderd

Topicstarter
Hmm hij doet wel iets meer.. Maar de kleur blijft wit :P

  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 14:59

pjvandesande

GC.Collect(head);

Verwijderd schreef op 20 oktober 2004 @ 13:18:
Hmm hij doet wel iets meer.. Maar de kleur blijft wit :P
Waar vraag jij dit nu op, in welk event en welke code?

Verwijderd

Topicstarter
code:
1
2
3
4
5
6
7
8
9
private void tTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
    int xCor, yCor;

    sbpCor.Text = Cursor.Position.X.ToString() + ", " + Cursor.Position.Y.ToString();
    xCor = Cursor.Position.X;
    yCor = Cursor.Position.Y;
    pColor.BackColor = Color.FromArgb(GetPixel(xCor, yCor));
}


Aangezien hij onder MouseMove niet het hele beeld pakt maar alleen de Form :S

pColor is een panel
spbCor is een Statusbarpanel

- edit -

Wanneer ik de waarde van GetPixel op een label laat weergeven geeft hij -1 terug |:(

[ Voor 12% gewijzigd door Verwijderd op 20-10-2004 13:40 ]


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Ik zie ook nergens waar je je Device Handle meegeeft. Kijk anders even in de MSDN bij http://msdn.microsoft.com...n-us/gdi/bitmaps_0rho.asp

Waarschijnlijk zal je een handle naar het scherm mee moeten geven.

edit:
Ik zie net dat dit de methode is voor een Bitmap dus heb je er niet veel aan denk :)

[ Voor 17% gewijzigd door Woy op 20-10-2004 14:21 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Verwijderd

Topicstarter
Heb ik nu als het goed is wel.
Maar krijg de melding dat het apparaat al in gebruik is?
Pagina: 1