Lister pixels couleur spécifique : GetPixel [Résolu]

Signaler
Messages postés
23
Date d'inscription
samedi 10 avril 2010
Statut
Membre
Dernière intervention
28 juin 2012
-
irvine31
Messages postés
23
Date d'inscription
samedi 10 avril 2010
Statut
Membre
Dernière intervention
28 juin 2012
-
Bonjour,
J'ai découvert une API qui peut m’être très utile : GetPixel.
J'ai fait pas mal de recherche et j'en suis venu à ceci :

Public Class Form1
    Public Declare Function GetPixel Lib "gdi32.dll" (ByVal hdc As IntPtr, ByVal x As Integer, ByVal y As Integer) As IntPtr
    Public Declare Function GetWindowDC Lib "user32.dll" (ByVal hwnd As IntPtr) As IntPtr

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        For Each Personnage In Process.GetProcessesByName("Procecus")
            Dim cacao As IntPtr = GetWindowDC(Personnage.MainWindowHandle)
            TextBox1.Text = GetPixel(cacao, Cursor.Position.X, Cursor.Position.Y).ToString
        Next
    End Sub
End Class


Tout fonctionne à merveille !
Mais j'aimerais lister toute les positions où les pixels ont une couleur spécifique.
Concrètement, j'aimerais avoir les positions (X et Y) dans la fenêtre où les pixels ont cette valeurs : "15527405".

Voici ma question :
Est-ce que je suis obligé de tester la valeur de chacun des pixels un par un pour effectuer la liste ou existe-il une solution plus simple ?
Par exemple si il existait une API ("FindPixel" pour handle spécifique) se serait super !
Le problème c'est que la fonction va être répété extrêmement rapidement donc j'ai peur que cela prenne beaucoup de ressource ...
Donnez-moi votre point de vue s'il vous plait.
Bonne soirée à tous !

4 réponses

Messages postés
14655
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
23 février 2020
139
Bonjour,

Non, je ne pense pas que ça existe, il faudra que tu fasse la boucle pour contrôler tout les pixels.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
220
Bonjour,
mais si quelqu'un d'autre à une astuce je suis preneur

Il n'en existe pas. Je plussoie ce que t'en a dit NHenry.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
23
Date d'inscription
samedi 10 avril 2010
Statut
Membre
Dernière intervention
28 juin 2012

Merci pour ta réponse, je vais faire ceci mais si quelqu'un d'autre à une astuce je suis preneur
Messages postés
23
Date d'inscription
samedi 10 avril 2010
Statut
Membre
Dernière intervention
28 juin 2012

Bon, je vais faire comme ça
Sujet résolu, merci à vous deux !