IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

Visual C++ Discussion :

GetPixel sous Visual C++ 2005 Express


Sujet :

Visual C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    4
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 4
    Par d�faut GetPixel sous Visual C++ 2005 Express
    Bonjour,

    Je commence � m'arracher les cheveux sur un truc sans doute tr�s b�te, alors j'ai d�cid� de vous demander votre aide. J'ai en effet parcouru pas mal de forums � la recherche d'une r�ponse, mais sans succ�s.

    J'ai cr�� sous DEV C++ un petit programme qui lit le pixel � l'�cran, et suivant la couleur du pixel en question, r�alise une certaine action (pas la peine d'entrer dans les d�tails). Mon programme �tant compliqu�, je me suis d�cid� � passer sous Visual C++ afin de ne plus devoir g�rer les LRESULT CALLBACK et autre WinAPI qui me causaient des soucis.

    Le probl�me c'est qu'apr�s reconversion pour rendre mon code compatible avec Visual, j'obtiens une erreur dont je ne sais que faire. J'ai isol� le probl�me et cr�er un programme minimal qui reproduit cette erreur. Il s'agit d'une fen�tre avec un bouton, et quand on clique sur le bouton, le programme est cens� lire le pixel (100,100).

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
     
    #pragma once
     
    #include <windows.h>
     
     
    unsigned Rouge;
     
    COLORREF Couleur;
     
    namespace GetPixel2 {
     
    	using namespace System;
    	using namespace System::ComponentModel;
    	using namespace System::Collections;
    	using namespace System::Windows::Forms;
    	using namespace System::Data;
    	using namespace System::Drawing;
     
    	/// <summary>
    	/// Description résumée de Form1
    	///
    	/// AVERTISSEMENT : si vous modifiez le nom de cette classe, vous devrez modifier la
    	///          propriété 'Nom du fichier de ressources' de l'outil de compilation de ressource managée
    	///          pour tous les fichiers .resx dont dépend cette classe. Dans le cas contraire,
    	///          les concepteurs ne pourront pas interagir correctement avec les ressources
    	///          localisées associées à ce formulaire.
    	/// </summary>
    	public ref class Form1 : public System::Windows::Forms::Form
    	{
    	public:
    		Form1(void)
    		{
    			InitializeComponent();
    			//
    			//TODO : ajoutez ici le code du constructeur
    			//
    		}
     
    	protected:
    		/// <summary>
    		/// Nettoyage des ressources utilisées.
    		/// </summary>
    		~Form1()
    		{
    			if (components)
    			{
    				delete components;
    			}
    		}
    	private: System::Windows::Forms::Button^  button1;
    	protected: 
     
    	private:
    		/// <summary>
    		/// Variable nécessaire au concepteur.
    		/// </summary>
    		System::ComponentModel::Container ^components;
     
    #pragma region Windows Form Designer generated code
    		/// <summary>
    		/// Méthode requise pour la prise en charge du concepteur - ne modifiez pas
    		/// le contenu de cette méthode avec l'éditeur de code.
    		/// </summary>
    		void InitializeComponent(void)
    		{
    			this->button1 = (gcnew System::Windows::Forms::Button());
    			this->SuspendLayout();
    			// 
    			// button1
    			// 
    			this->button1->Location = System::Drawing::Point(113, 92);
    			this->button1->Name = L"button1";
    			this->button1->Size = System::Drawing::Size(75, 23);
    			this->button1->TabIndex = 0;
    			this->button1->Text = L"button1";
    			this->button1->UseVisualStyleBackColor = true;
    			this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click);
    			// 
    			// Form1
    			// 
    			this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
    			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
    			this->ClientSize = System::Drawing::Size(292, 266);
    			this->Controls->Add(this->button1);
    			this->Name = L"Form1";
    			this->Text = L"Form1";
    			this->ResumeLayout(false);
     
    		}
    #pragma endregion
    	private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
     
    			HDC hdcScreen = GetDC(NULL);
    			Couleur = GetPixel(hdcScreen,100,100);
    			Rouge = GetRValue(Couleur);
     
     
    			 }
    	};
    }
    L'erreur donne �a :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    Édition des liens en cours...
    GetPixel2.obj : error LNK2028: jeton non résolu (0A00000E) "extern "C" unsigned long __stdcall GetPixel(struct HDC__ *,int,int)" (?GetPixel@@$$J212YGKPAUHDC__@@HH@Z) référencé dans la fonction "private: void __clrcall GetPixel2::Form1::button1_Click(class System::Object ^,class System::EventArgs ^)" (?button1_Click@Form1@GetPixel2@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z)
    GetPixel2.obj : error LNK2028: jeton non résolu (0A00000F) "extern "C" struct HDC__ * __stdcall GetDC(struct HWND__ *)" (?GetDC@@$$J14YGPAUHDC__@@PAUHWND__@@@Z) référencé dans la fonction "private: void __clrcall GetPixel2::Form1::button1_Click(class System::Object ^,class System::EventArgs ^)" (?button1_Click@Form1@GetPixel2@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z)
    GetPixel2.obj : error LNK2019: symbole externe non résolu "extern "C" unsigned long __stdcall GetPixel(struct HDC__ *,int,int)" (?GetPixel@@$$J212YGKPAUHDC__@@HH@Z) référencé dans la fonction "private: void __clrcall GetPixel2::Form1::button1_Click(class System::Object ^,class System::EventArgs ^)" (?button1_Click@Form1@GetPixel2@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z)
    GetPixel2.obj : error LNK2019: symbole externe non résolu "extern "C" struct HDC__ * __stdcall GetDC(struct HWND__ *)" (?GetDC@@$$J14YGPAUHDC__@@PAUHWND__@@@Z) référencé dans la fonction "private: void __clrcall GetPixel2::Form1::button1_Click(class System::Object ^,class System::EventArgs ^)" (?button1_Click@Form1@GetPixel2@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z)
    C:\Documents and Settings\Ludovic\Mes documents\Visual Studio 2005\Projects\GetPixel2\Debug\GetPixel2.exe : fatal error LNK1120: 4 externes non résolus
    Je ne suis pas tr�s au point, mais je ne comprends pas o� est le probl�me. Mes librairies sont correctement charg�es (enfin j'esp�re) alors pourquoi y'a-t'il un probl�me de linkage ? Est-ce que j'utilise mal GetPixel et GetDC (probl�me de private ou autre li� � la classe) ? Mais pourquoi alors GetRValue ne pose pas de probl�me ? Pourtant cela marchait ainsi sous DEV C++, sans probl�me...

    Merci beaucoup de votre aide.

  2. #2
    R�dacteur

    Avatar de Matthieu Brucher
    Profil pro
    D�veloppeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France, Pyr�n�es Atlantiques (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par d�faut
    Tu lies bien avec la bonne biblioth�que ?

  3. #3
    R�dacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par d�faut
    si tu utilises les winforms, pourquoi tu n'utilises pas l'objet Graphics du framework .net plutot ?
    avec des choses du genre
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    System.Drawing.Graphics.FromHwnd(Windows.Forms.Control.Handle)
    System.Drawing.Printing.PrintPageEventArgs.Graphics
    System.Windows.Forms.PaintEventArgs.Graphics

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    4
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 4
    Par d�faut
    Miles >> La bibli c'est user32 ou ole32 ? Elles sont toutes les deux dans le dossier des options de Visual. Suivant m�me les conseils de microsoft, j'ai �dit� le fichier "corewin_express.vsprops" pour y ins�rer une bonne liste de bibli susceptibles d'�tre utilis�es :
    ernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib user32.lib.

    nico-pyright(c) >> Je suis d�butant en Visual, et je ne connaissais pas l'objet graphics dont tu parles. Je vais aller fouiller le Net � ce propos.

    Merci � vous deux. Si j'ai r�solu mon probl�me, je viendrai vous en rendre compte.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    4
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 4
    Par d�faut
    Je suis all� voir ce qu'on peut trouver sur les objets graphics. Et voil� � quoi �a peut ressembler :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    System::Drawing::Bitmap ^BitmapAMOI;	
    System::Drawing::Graphics ^GraphiqueAMOI;
     
    GraphiqueAMOI = System::Drawing::Graphics::FromHwnd(IntPtr(0));
     
    Color Couleur = BitmapAMOI->GetPixel(100,1000);
    Le code n'est pas fonctionnel car il manque une ligne. Il faudrait enregistrer dans le bitmap ce qui se trouve actuellement dans le Graphics, sinon le bitmap est �videmment vide. Mais je n'ai pas trouv� comment effectuer une telle conversion.

    D'ailleurs d'apr�s ce que je lis sur les forums, on a plut�t tendance � faire l'inverse (Passer de bitmap � graphics pour pouvoir dessinner). Mais alors n'y-a-t'il pas une m�thode GetPixel li�e � Graphics ? Ou un moyen de faire autrement ?

    Merci d'avance.

  6. #6
    R�dacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par d�faut
    regarde du cot� de Graphics.CopyFromScreen

Discussions similaires

  1. Perte partielle de l'autocompl�tion sous Visual C++ 2005 Express
    Par Niko_de_bordo dans le forum Visual C++
    R�ponses: 1
    Dernier message: 27/04/2010, 15h59
  2. R�ponses: 2
    Dernier message: 07/12/2009, 18h50
  3. application sous Visual basic 2005 express
    Par elmo93 dans le forum Windows Forms
    R�ponses: 1
    Dernier message: 29/01/2008, 09h55
  4. Debutant besoin d'aide sous visual cpp 2005 express
    Par Jhulk dans le forum D�buter
    R�ponses: 2
    Dernier message: 19/10/2007, 23h10
  5. Erreurs de links sous Visual C++ 2005 Express
    Par Spartan03 dans le forum wxWidgets
    R�ponses: 6
    Dernier message: 13/11/2006, 18h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo