|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
[WIN32]RÉCUPÉRER LA COULEUR D'UN PIXEL À L'ÉCRAN
Information sur la source
Description
Ce source récupère la couleur du pixel qui se trouve sous la souris. La couleur est affiché en décimal R, G, B et en hexa. Le fond de la form prend la même couleur que celle du pixel. Pour ceux qui voudraient juste utiliser ce programme sans avoir besoin de compiler, il suffit de renommer le fichier du zip .exec en .exe.
Source
- #include "windows.h"
-
- HINSTANCE _hThisInstance; // Handle du module
- HWND _hWnd; // Handle de la fenêtre
- HWND _hTextBox; // Handle de la textbox
- LPSTR _lpAppName = "GetPixelColor"; // Nom de l'appli
-
- //
- // Affiche le message d'erreur associé à la dernière
- // erreur Win32 et ferme l'appli.
- //
- void ShowLastError()
- {
- DWORD nLastError;
- LPSTR lpMessageBuffer;
-
- // Récupération du numéro de l'erreur
- nLastError = GetLastError();
-
- // Formatage du message
- FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, nLastError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMessageBuffer, 0, NULL);
-
- // Affichage du message et fin de l'appli
- MessageBox(NULL, lpMessageBuffer, "ERROR", MB_OK | MB_ICONERROR);
- //ExitProcess(nLastError);
- }
-
- //
- // Traitement des messages.
- //
- LRESULT CALLBACK WindowProcedure(HWND hWnd, UINT nMessage, WPARAM wParam, LPARAM lParam)
- {
- static HBRUSH hBackBrush; // Brush de dessin de l'arrière plan de la fenêtre
- static POINT cursor; // Position de la souris
- static COLORREF nColor; // Couleur du pixel sous la souris
- static RECT back; // Rectangle de la zone cliente/fenêtre
- static char lpText[50]; // Affichage de la couleur en hexa et rgb
- static INT32 nHexa; // La couleur swapée pour afficher un hexa comme on l'attend
- static HDC hScreenDC; // HDC de l'écran
-
- switch (nMessage)
- {
- case WM_TIMER:
- // On met à jour seulement si on est hors de notre fenêtre
- GetCursorPos(&cursor);
- GetWindowRect(_hWnd, &back);
-
- // Pas besoin de ReleasDC pour ce GetDC : CS_OWNDC dans le style de la classe
- if (! PtInRect(&back, cursor)) SendMessage(_hWnd, WM_ERASEBKGND, (WPARAM)GetDC(_hWnd), 0);
- break;
- case WM_ERASEBKGND:
- // Récupération des coordonnées de la souris
- GetCursorPos(&cursor);
-
- // Récupération de la couleure du pixel sous la souris
- hScreenDC = GetDC(0);
- nColor = GetPixel(hScreenDC, cursor.x, cursor.y);
- nHexa = ReleaseDC(0, hScreenDC);
-
- // Création du brush de dessin de l'arrière plan de la form
- hBackBrush = CreateSolidBrush(nColor);
-
- // Dessin de la fenêtre
- GetClientRect(_hWnd, &back);
- FillRect((HDC)wParam, &back, hBackBrush);
- DeleteObject(hBackBrush);
-
- // On remet les octets dans le "bon" sens
- nHexa = ((nColor & 0xFF) << 16) | (nColor & 0xFF00) | ((nColor & 0xFF0000) >> 16);
-
- // Affichage de la couleur en hexa
- // Le dièze, c'est juste qu'en HTML on en met un.
- // %X, ça convertit l'entier en hexa (En majuscule)
- // %6X, ça complète la conversion avec des espaces pour que la chaîne fasse 6 caractères
- // %06X, ça demande des 0 à la place des espaces pour arriver à 6 caractères
- wsprintf(lpText, "#%06X (R = %d, G = %d, B = %d)", nHexa, nColor & 0xFF, (nColor & 0xFF00) >> 8, (nColor & 0xFF0000) >> 16);
- SetWindowText(_hTextBox, lpText);
- RedrawWindow(_hTextBox, NULL, NULL, RDW_INVALIDATE);
- return 1;
- case WM_DESTROY:
- // On signale que le thread va s'arrêter
- PostQuitMessage(0);
- break;
- default:
- // Application du traitement par défaut
- return DefWindowProc(hWnd, nMessage, wParam, lParam);
- }
- return 0;
- }
-
- //
- // Initialise la fenêtre principale de l'appli.
- //
- void InitWindow()
- {
- WNDCLASSEX wincl; // Classe de la fenêtre utilisée
-
- // Création de la classe de fenêtre
- wincl.cbSize = sizeof(WNDCLASSEX);
- wincl.style = CS_OWNDC;
- wincl.lpfnWndProc = WindowProcedure;
- wincl.cbClsExtra = 0;
- wincl.cbWndExtra = 0;
- wincl.hInstance = _hThisInstance;
- wincl.hIcon = LoadIcon(NULL, IDI_APPLICATION);
- wincl.hCursor = LoadCursor(NULL, IDC_ARROW);
- wincl.hbrBackground = NULL;
- wincl.lpszMenuName = 0;
- wincl.lpszClassName = _lpAppName;
- wincl.hIconSm = NULL;
-
- // Enregistrement de la classe
- if (!RegisterClassEx(&wincl)) ShowLastError();
-
- // Création de la fenêtre
- _hWnd = CreateWindowEx(0, _lpAppName, _lpAppName, WS_OVERLAPPED | WS_SYSMENU | WS_MINIMIZEBOX | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 300, 100, HWND_DESKTOP, NULL, _hThisInstance, NULL);
- _hTextBox = CreateWindowEx(0, "EDIT", "color", ES_READONLY | WS_VISIBLE | WS_CHILD | WS_BORDER, 0, 0, 294, 20, _hWnd, NULL, _hThisInstance, NULL);
- }
-
- #pragma comment(linker, "/entry:main")
- INT32 _cdecl main()
- {
- MSG messages; // Réception des messages envoyés à l'application
-
- // Récupération du handle du module
- _hThisInstance = GetModuleHandle(NULL);
-
- InitWindow();
- if (!SetTimer(_hWnd, 1, 100, NULL)) ShowLastError();
-
- // Boucle de traitement des messages
- while (GetMessage(&messages, NULL, 0, 0))
- {
- // Traduit certains messages
- TranslateMessage(&messages);
-
- // Distribution des messages aux fenêtres
- DispatchMessage(&messages);
- }
- KillTimer(_hWnd, 1);
-
- // Code d'erreur en sortie
- return messages.wParam;
- }
#include "windows.h"
HINSTANCE _hThisInstance; // Handle du module
HWND _hWnd; // Handle de la fenêtre
HWND _hTextBox; // Handle de la textbox
LPSTR _lpAppName = "GetPixelColor"; // Nom de l'appli
//
// Affiche le message d'erreur associé à la dernière
// erreur Win32 et ferme l'appli.
//
void ShowLastError()
{
DWORD nLastError;
LPSTR lpMessageBuffer;
// Récupération du numéro de l'erreur
nLastError = GetLastError();
// Formatage du message
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, nLastError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMessageBuffer, 0, NULL);
// Affichage du message et fin de l'appli
MessageBox(NULL, lpMessageBuffer, "ERROR", MB_OK | MB_ICONERROR);
//ExitProcess(nLastError);
}
//
// Traitement des messages.
//
LRESULT CALLBACK WindowProcedure(HWND hWnd, UINT nMessage, WPARAM wParam, LPARAM lParam)
{
static HBRUSH hBackBrush; // Brush de dessin de l'arrière plan de la fenêtre
static POINT cursor; // Position de la souris
static COLORREF nColor; // Couleur du pixel sous la souris
static RECT back; // Rectangle de la zone cliente/fenêtre
static char lpText[50]; // Affichage de la couleur en hexa et rgb
static INT32 nHexa; // La couleur swapée pour afficher un hexa comme on l'attend
static HDC hScreenDC; // HDC de l'écran
switch (nMessage)
{
case WM_TIMER:
// On met à jour seulement si on est hors de notre fenêtre
GetCursorPos(&cursor);
GetWindowRect(_hWnd, &back);
// Pas besoin de ReleasDC pour ce GetDC : CS_OWNDC dans le style de la classe
if (! PtInRect(&back, cursor)) SendMessage(_hWnd, WM_ERASEBKGND, (WPARAM)GetDC(_hWnd), 0);
break;
case WM_ERASEBKGND:
// Récupération des coordonnées de la souris
GetCursorPos(&cursor);
// Récupération de la couleure du pixel sous la souris
hScreenDC = GetDC(0);
nColor = GetPixel(hScreenDC, cursor.x, cursor.y);
nHexa = ReleaseDC(0, hScreenDC);
// Création du brush de dessin de l'arrière plan de la form
hBackBrush = CreateSolidBrush(nColor);
// Dessin de la fenêtre
GetClientRect(_hWnd, &back);
FillRect((HDC)wParam, &back, hBackBrush);
DeleteObject(hBackBrush);
// On remet les octets dans le "bon" sens
nHexa = ((nColor & 0xFF) << 16) | (nColor & 0xFF00) | ((nColor & 0xFF0000) >> 16);
// Affichage de la couleur en hexa
// Le dièze, c'est juste qu'en HTML on en met un.
// %X, ça convertit l'entier en hexa (En majuscule)
// %6X, ça complète la conversion avec des espaces pour que la chaîne fasse 6 caractères
// %06X, ça demande des 0 à la place des espaces pour arriver à 6 caractères
wsprintf(lpText, "#%06X (R = %d, G = %d, B = %d)", nHexa, nColor & 0xFF, (nColor & 0xFF00) >> 8, (nColor & 0xFF0000) >> 16);
SetWindowText(_hTextBox, lpText);
RedrawWindow(_hTextBox, NULL, NULL, RDW_INVALIDATE);
return 1;
case WM_DESTROY:
// On signale que le thread va s'arrêter
PostQuitMessage(0);
break;
default:
// Application du traitement par défaut
return DefWindowProc(hWnd, nMessage, wParam, lParam);
}
return 0;
}
//
// Initialise la fenêtre principale de l'appli.
//
void InitWindow()
{
WNDCLASSEX wincl; // Classe de la fenêtre utilisée
// Création de la classe de fenêtre
wincl.cbSize = sizeof(WNDCLASSEX);
wincl.style = CS_OWNDC;
wincl.lpfnWndProc = WindowProcedure;
wincl.cbClsExtra = 0;
wincl.cbWndExtra = 0;
wincl.hInstance = _hThisInstance;
wincl.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wincl.hCursor = LoadCursor(NULL, IDC_ARROW);
wincl.hbrBackground = NULL;
wincl.lpszMenuName = 0;
wincl.lpszClassName = _lpAppName;
wincl.hIconSm = NULL;
// Enregistrement de la classe
if (!RegisterClassEx(&wincl)) ShowLastError();
// Création de la fenêtre
_hWnd = CreateWindowEx(0, _lpAppName, _lpAppName, WS_OVERLAPPED | WS_SYSMENU | WS_MINIMIZEBOX | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 300, 100, HWND_DESKTOP, NULL, _hThisInstance, NULL);
_hTextBox = CreateWindowEx(0, "EDIT", "color", ES_READONLY | WS_VISIBLE | WS_CHILD | WS_BORDER, 0, 0, 294, 20, _hWnd, NULL, _hThisInstance, NULL);
}
#pragma comment(linker, "/entry:main")
INT32 _cdecl main()
{
MSG messages; // Réception des messages envoyés à l'application
// Récupération du handle du module
_hThisInstance = GetModuleHandle(NULL);
InitWindow();
if (!SetTimer(_hWnd, 1, 100, NULL)) ShowLastError();
// Boucle de traitement des messages
while (GetMessage(&messages, NULL, 0, 0))
{
// Traduit certains messages
TranslateMessage(&messages);
// Distribution des messages aux fenêtres
DispatchMessage(&messages);
}
KillTimer(_hWnd, 1);
// Code d'erreur en sortie
return messages.wParam;
}
Fichier Zip
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
Télécharger le zip
Historique
- 15 novembre 2007 10:01:36 :
- Modifes suggérées par les premiers posts.
- 15 novembre 2007 10:05:12 :
- Bout de code en trop.
- 21 novembre 2007 10:02:30 :
- Confusion entre le style de classe et le style de fenêtre.
- 21 novembre 2007 10:05:58 :
- Argh !
- 21 novembre 2007 13:00:54 :
- La dernière MAJ... avant la suivante.
Sources du même auteur
Sources de la même categorie
Sources en rapport avec celle ci
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Récupérer la couleur d'un pixel à la position x,y de l'écran [ par atao ]
quelqu' un sait il comment peut on récupérer la couleur d'un pixel à la position x,y de l'écranmerciatao.
couleur de pixel (DX) [ par JediMaster ]
comment peut t'on récupérer la couleur d'un pixel et la changer sur une surface directdraw ?ca m'aiderait trop merci
tableaux & collisions [ par JediMaster ]
j'utilile directdraw avec la technique du blitting (les pixels d'une certaine couleur sont pas collé sur la surface et donc cela crée la tranparence)j
connaitre la couleur d un pixel sous windows [ par vychnou ]
Bonjour a tous!Mon probleme:j ai besoin de connaitre la couleur d un pixel particulier(par exemple celui pointé par la souris ou bien un pixel dont on
SetPixel et GetPixel [ par Adeon ]
Salut je n'arrive pas a me servir de SetPixel() et GetPixel() en API. Je sais que ca existe mais j'ai des erreurs tout le temps quand je m'en ser. QQ
test_la couleur d un pixel .... ca existe sous c_allegro ??? [ par dcousseau ]
qql connai t il une commande sous c_allegro qui permette de tester la couleur d'un pixel a l'écran?merci d'avancecouscous
Couleur d'un Pixel [ par Me109 ]
Bonjour je voudrais savoir comment peut on changer la couleur d'un pixelmerci Le mépris de ceux qui ne savent pas n'est pas une preuve de savoir
Allegro: Connaitre les valeurs r,g,b d'un pixel [ par Kleidp ]
Salut,voici mon problème:Je suis en mode truecolor 32 bit avec Allegro, et j'aimerais connaitre les valeurs r,g,b d'un pixel de mon image.J'ai essayé
Couleurs avec X11 [ par toto000 ]
Bonjour,je suis novice en programmation graphique sous X11 et j'aimerai savoir comment afficher un pixel coloré.Je sais qu'il existe une fonction putp
Recuperer la couleur d un pixel [ par Ptlpn ]
Bonjour,Jutilise la librairie Glut, te je voulais en fait recuperer la couleur d un pixel donné. En fait, je souhaite faire une palette de couleu
|
Téléchargements
Logiciels à télécharger sur le même thème :
|