Προς το περιεχόμενο

Ανίχνευσης χρωμάτων με C++


jianoloukia

Προτεινόμενες αναρτήσεις

Καλησπερα,

 

Θέλω να φτιάξω ένα πρόγραμμα το οποίο να λειτουργεί ως εξής,όταν ανιχνεύει το ποντίκι κάποιο συγκεκριμένο χρώμα στην οθόνη (με click ή χωρις)που θα το έχω ορίσει εγώ ,να μου ανοίγει καποια είκονα η οποία θα υπαρχει μέσα στο πρόγραμμα μου.Δηλαδή να ορίσω 10 διαφορετικά χρωματα και καθε φορά που το ποντίκι ανιχνεύει κάποιο απο αυτά ,να εμφανίζει την αντίστοιχη είκονα.

 

υ.γ : Οι γνώσεις μου στον προγραμματισμό ειναι σε χαμηλό επίπεδο,οτι έμαθα στη σχολή.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Να ανιχνεύσεις χρώμα με κώδικα δεν είναι εφικτό, αυτο που μπορείς να κάνεις ειναι στο συγκεκριμένο σημείο της οθόνης που εχεις πχ το κόκκινο να πεις στον κώδικα τις συντεταγμένες του σημείου, όποτε όταν κάνεις κλικ με το ποντίκι εκει θα εχεις το αποτέλεσμα που θελεις.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αφού αυτο δεν ειναι εφικτό,μου έδωσες αλλη ιδέα.Αυτο που θέλω να κανω γίνετε και με συντεταγμενες.π.χ οταν πατάω κάποιο συγκεκριμενο pixel της οθόνης να εμφανίζετε η εικόνα που θέλω.


Καποιος έχει ιδεα για του που θα βρώ ένα τέτοιο έτοιμο κώδικα? Ή να με βοηθήσει να τον φτιάξω?

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Σε τι λειτουργικό δουλεύεις;

Αν είσαι σε windows μπορείς να χρησιμοποιήσεις το Win32Api για να πάρεις το χρώμα από το σημείο που βρίσκεται το ποντίκι σου.

Δες αυτό το παράδειγμα που κάνει ακριβώς αυτό που ρώτησες στην αρχή. Η μόνη διαφορά είναι ότι αυτός εμφανίζει μία φορά το χρώμα ενώ εσύ θα το βάλεις σε επανάληψη για να ελέγχει συνέχεια τα χρώματα και θα τα συγκρίνεις με τα προκαθορισμένα.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες


#include <Windows.h>
#include <iostream>

bool IsPointInRect(const POINT& point, const RECT& rect)
{
return (
rect.left < point.x
&& rect.right > point.x
&& rect.top < point.y
&& rect.bottom > point.y
);
}

int main()
{
HDC hDc;
POINT point;
COLORREF color;
RECT rect;
HBRUSH hBrush;
rect.top = 0;
rect.left = 0;
rect.bottom = 100;
rect.right = 100;
while(true)
{
//pare to position toy mouse
GetCursorPos(&point);
//tsekare an einai mesa sto tetragwno, an einai spase ton broxo
if(IsPointInRect(point,rect))
break;
//an den einai, pes sto xrhsth na..
std::cout<<"Vale ta koylo soy mesa sto tetragwno reeeeee!!!"<<std::endl;
//pare to hdc (des msdn gia hdc) tou desktop
hDc = GetDC(HWND_DESKTOP);
//to phrame h arxidia?
if(hDc == 0)
{
std::cout<<"Paparia..."<<std::endl;
//spase
break;
}
//an to phrame, tote as paroyme ena screenshot 1x1 ekei pot einai to mouse
color = GetPixel(hDc, point.x, point.y);
//as ftiaksoyme mia pena me to xrwma poy phrame
hBrush = CreateSolidBrush(color);
//kai as zwgrafisoume ena tetragwno me ayth thn pena
FillRect(hDc,&rect,hBrush);
//telos diagrafoyme thn pena
DeleteObject(hBrush);
//kai apeletheromoyme to dc
ReleaseDC(HWND_DESKTOP, hDc);
//as mhn priksoyme ta papakia toy cpu
Sleep(100);
}

return 0;
}

 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αυτο μου βγάζει 

[Linker error] undefined reference to 'GetPixel@12'

[Linker error] undefined reference to `CreateSolidBrush@4'

[Linker error] undefined reference to `DeleteObject@4'

ld returned 1 exit status

 C:\Users\x\Desktop\Makefile.win [build Error] n\make.exe: *** [Project1.exe] Error 1

 

 

Ή κάτι δε κάνω  σωστά ή είμαι πολύ καντέμης :D

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

#include <Windows.h>
#include <iostream>

bool IsPointInRect(const POINT& point, const RECT& rect)
{
	return ( 
		rect.left		< point.x
		&& rect.right	> point.x
		&& rect.top		< point.y
		&& rect.bottom	> point.y
		);
}

int main()
{
	HDC			hDc;
	POINT		point;
	COLORREF	color;
	RECT		rect;
	HBRUSH		hBrush;
	rect.top		= 0;
	rect.left		= 0;
	rect.bottom		= 100;
	rect.right		= 100;
	while(true)
	{
		//pare to position toy mouse
		GetCursorPos(&point);
		//tsekare an einai mesa sto tetragwno, an einai spase ton broxo
		if(IsPointInRect(point,rect))
			break;
		//an den einai, pes sto xrhsth na..
		std::cout<<"Vale ta koylo soy mesa sto tetragwno reeeeee!!!"<<std::endl;
		//pare to hdc (des msdn gia hdc) tou desktop
		hDc = GetDC(HWND_DESKTOP);
		//to phrame h arxidia?
		if(hDc == 0)
		{
			std::cout<<"Paparia..."<<std::endl;
			//spase
			break;
		}
		//an to phrame, tote as paroyme ena screenshot 1x1 ekei pot einai to mouse
		color = GetPixel(hDc, point.x, point.y);
		//as ftiaksoyme mia pena me to xrwma poy phrame
		hBrush = CreateSolidBrush(color);
		//kai as zwgrafisoume ena tetragwno me ayth thn pena
		FillRect(hDc,&rect,hBrush);
		//telos diagrafoyme thn pena
		DeleteObject(hBrush);
		//kai apeletheromoyme to dc
		ReleaseDC(HWND_DESKTOP, hDc);
		//as mhn priksoyme ta papakia toy cpu
		Sleep(100);
	}

	return 0;
}

Μιας και δεν έχεις ορίσει namespace μήπως θέλει iostream.h στην δέυτερη γραμμή;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ναι,σε παρακαλω πες μου τι να κατεβάσω γιατί με αυτό δε θα κανώ ποτε τη δουλειά μου.Αν και ειναι το μόνο ξέρω να χρησιμοποιώ.

Τι να σου πω τωρα για αυτη την μπακατελα; Ψαξε στο google για "add gdi32.lib in devc++"

Μιας και δεν έχεις ορίσει namespace μήπως θέλει iostream.h στην δέυτερη γραμμή;

Τι να εχω κανει; :huh:

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Επειδή δεν νομιζω να καταφερουμε κατι απο εδω.Οποιος εχει ορεξη να βοηθησει ας μου στηλει ενα μηνυμα να του πω το skype μου.

 

Ευχαριστω!

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...