C++-ban hogyan lehet megcsinálni, hogy az egér egy kiválasztott színű pixelre kattintson?
Szia!
Elég kevés információt adtál meg. Az első legfontosabb kérdés,hogy milyen operációs rendszer. Azért fontos,mert itt eseménykezelésről van szó,az pedig eltérő.
Windows alatt igen könnyű a dolog.
#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
HDC hDC = GetDC(HWND_DESKTOP);
COLORREF rgb;
POINT p;
//Definiáld a keresett pixel RGB színkódjait(0-255)
int defR = ...;
int defG = ...;
int defB = ...;
//Mivel a COLORREF 0x00bbggrr alakú színkódot ad
//ezért a lekérdezett színeket byte típusként kérjük le
BYTE actR, actG, actB;
//a BYTE színkódokat majd integerré castoljuk,ezekbe
//hogy a decimális értékeket hasonlítsunk össze
int actRD, actGD, actBD;
//tegyük fel,hogy tudod,hogy mekkora területen kell
//keresned ezt a területet jelöli xMin,xMax, yMin
//yMax
for(int cx = xMin; x<= xMax; cx++)
for(cy = yMin; y<=yMax; cy++)
{
p.x = cx;
p.y = cy;
//lekérdezzük az aktuális pont színkódját
rgb = GetPixel(hDC, p.x, p.y);
//szétszedjük
//hozzáteszem közvetlen is lehetne int lekérni
actR = GetRValue(rgb);
actG = GetGValue(rgb);
actB = GetBValue(rgb);
//Mehet intbe decimális érték végett
actRD = (int)actR;
actGD = (int)actG;
actBD = (int)actB;
//egyszerű összehasonlítás
if(defR == actRD && defG == actGD...)
{
SetCursorPos(p.x,p.y);
break;
}
}
}
Nem hatékony megoldás a területvizsgálás,de ez is egy módja. A kódot kiegészítve átírva már egyszerűen feladatspecifikusan is megoldhatod.
A Linux,akkor abban is tudok segíteni.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!