Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] kolor pixela

Ostatnio zmodyfikowano 2009-05-17 20:23
Autor Wiadomość
robaczek122
Temat założony przez niniejszego użytkownika
[C++] kolor pixela
» 2009-05-13 10:20:08
Czolem!
Chcialem zrobic jakis wiekszy program, a wlasciwie nieszkodliwego bota. Wszystko wlasciwie mogloby juz dzialac, ale zatrzymalem sie i juz od kilku dni nie posunalem sie nawet na krok do przodu... Mam problem z pobieraniem koloru pixela. Z tego co sie dowiedzialem to w jako takim C++ w jakim pisalem wszystko (caly algorytm "myslacy", symulacja myszki i klawiatury) nie da sie tego zrobic. (?chyba)
Podobno musze to zrobic w WinAPI. I tutaj zaczely sie schody... Co prawda google znalazlo mi przyklad na pobieracza kolorow:

C/C++
#include <iostream>
#include <windows.h>
using namespace std;




int main()
{
   
    HDC Ekran = GetDC( NULL );
    COLORREF Kolor = RGB( 255, 255, 255 );
    Kolor = GetPixel( Ekran, 0, 0 );
    short int r, g, b;
    r = GetRValue( Kolor );
    g = GetGValue( Kolor );
    b = GetBValue( Kolor );
   
    cout << "Czerwony  : " << r << "\n"
    "Zielony   : " << g << "\n"
    "Niebieski : " << b << "\n";
   
    ReleaseDC( NULL );
    system( "PAUSE" );
    return 0;
}

Ale nie potrafie tego skompilowac, a wlasciwie to kompilator nie potrafi :P (Dex-C++ 4.9.9.2) wywala strasznie duzo bledow.
Powyzszy kod wkleilem do nowego projektu "Windows Application" i nacisnalem F9, poprosil mnie o zapisanie, wiec zapisalem. I BUM, nie dziala :/

W ramach nauki, aby sie czegos dowiedziec, zajrzalem do tutoriala WinAPI i pierwszysz program:


C/C++
#include <windows.h>

INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR lStart, INT nShow )
{
    //bla bla bla
    return 0;
}
I BUUUUM, rowniez nie dziala:/
Pewnie robie cos glupiego, lub vista jest glupia:P bo przed pierwszymi kompilacjami normalnych prostych programow musialem zmienic sciezki w opcjach kompilatora, zeby wszystko dzialalo na cacy.

Bardzo prosze o pomoc :)
P-6783
krdk
» 2009-05-13 11:32:23
Pokaż log błędów.
P-6785
DejaVu
» 2009-05-13 11:32:57
Wklej logi kompilacji z drugiego programu. Mój wygląda tak:
Kompilator: Default compiler
Wykonywanie  g++.exe...
g++.exe "C:\Documents and Settings\Dejavu\Pulpit\plik.cpp" -o "C:\Documents and Settings\Dejavu\Pulpit\plik.exe"    -I"C:\Dev-Cpp\lib\gcc\mingw32\3.4.2\include"  -I"C:\Dev-Cpp\include\c++\3.4.2\backward"  -I"C:\Dev-Cpp\include\c++\3.4.2\mingw32"  -I"C:\Dev-Cpp\include\c++\3.4.2"  -I"C:\Dev-Cpp\include"   -L"C:\Dev-Cpp\lib"
Wykonanie zakończone
Kompilacja zakończona sukcesem
P-6786
robaczek122
Temat założony przez niniejszego użytkownika
» 2009-05-13 11:48:56
log z drugiej kompilacji:

C/C++
Kompilator: Default compiler
Building Makefile: "C:\Dev-Cpp\Makefile.win"
Wykonywanie make...
C:\D ev - Cpp\bin\make.exe - f "C:\Dev-Cpp\Makefile.win" all
C:\D ev - Cpp\bin\g++.exe - c main.cpp - o main.o - I "C:/Dev-Cpp/lib/gcc/mingw32/3.4.2/include" - I "C:/Dev-Cpp/include/c++/3.4.2/backward" - I "C:/Dev-Cpp/include/c++/3.4.2/mingw32" - I "C:/Dev-Cpp/include/c++/3.4.2" - I "C:/Dev-Cpp/include"

In file included from C:/ Dev - Cpp / include / windows.h: 55,
from main.cpp: 1:
C:/ Dev - Cpp / include / winuser.h: In function ` int main() ':
C:/ Dev - Cpp / include / winuser.h
    : 12
    : error
    : ` GetDC ' undeclared (first use this function) C:/ Dev - Cpp / include / winuser.h
    : 12
    : error
    :( Each undeclared identifier is reported only once for each function it appears in.) C:/ Dev - Cpp / include / winuser.h
    : 24
    : error
    : ` ReleaseDC ' undeclared (first use this function) In file included from C:/ Dev - Cpp / include / windows.h
    : 86
    , from main.cpp
    : 1
    : C:/ Dev - Cpp / include / commdlg.h
    : At global scope
    : C:/ Dev - Cpp / include / commdlg.h
    : 360
    : error
    : ` NMHDR ' does not name a type C:/ Dev - Cpp / include / commdlg.h
    : 365
    : error
    : ` NMHDR ' does not name a type In file included from C:/ Dev - Cpp / include / ole2.h
    : 29
    , from C:/ Dev - Cpp / include / windows.h
    : 111
    , from main.cpp
    : 1
    : C:/ Dev - Cpp / include / oleidl.h
    : 199
    : error
    : ` LPMSG ' has not been declared C:/ Dev - Cpp / include / oleidl.h
    : 303
    : error
    : ` TranslateAccelerator ' declared as a `virtual' field C:/ Dev - Cpp / include / oleidl.h
    : 303
    : error
    : expected `; ' before '( ' token

C:/ Dev - Cpp / include / oleidl.h: 329: error: ` TranslateAccelerator ' declared as a `virtual' field
C:/ Dev - Cpp / include / oleidl.h: 329: error: expected `; ' before '( ' token

In file included from C:/ Dev - Cpp / include / windows.h: 111,
from main.cpp: 1:
C:/ Dev - Cpp / include / ole2.h: 75: error: ` LPMSG ' has not been declared

C:/ Dev - Cpp / include / ole2.h: 85: error: ` LPMSG ' has not been declared

C:\D ev - Cpp\bin\make.exe: ***[ main.o ] Error 1

Wykonanie zako ń czone

edit: niepokojaca moze byc linijka:
C:/Dev-Cpp/include/winuser.h: In function `int main()':
`int main()' - wlasciwie nie wiem czemu w ogóle tam jest... (?)
P-6787
DejaVu
» 2009-05-13 18:59:20
Weź ściągnij sobie od nowa Dev-C++ i zainstaluj go poprawnie.
C/C++
#include <iostream>
#include <windows.h>
using namespace std;

int main()
{
   
    HDC Ekran = GetDC( NULL );
    COLORREF Kolor = RGB( 255, 255, 255 );
    Kolor = GetPixel( Ekran, 0, 0 );
    short int r, g, b;
    r = GetRValue( Kolor );
    g = GetGValue( Kolor );
    b = GetBValue( Kolor );
   
    cout << "Czerwony  : " << r << "\n"
    "Zielony   : " << g << "\n"
    "Niebieski : " << b << "\n";
   
    ReleaseDC( NULL, Ekran );
    system( "PAUSE" );
    return 0;
}
Powyższy kod się kompiluje. Linker wyrzuca jeden błąd:
[Linker error] undefined reference to `GetPixel@12'
Aby usunąć błąd linkera trzeba utworzyć projekt i dołączyć do niego jakąś bibliotekę (nie szukałem jaką).
P-6796
robaczek122
Temat założony przez niniejszego użytkownika
» 2009-05-17 13:54:29
na msdn znalazlem:

Header windows.h
Library coredll.lib
czy oznacza to ze musze sciagnac biblioteke coredll? szukalem, ale nie moglem znalezc...

na forum gdzie znalazlem przyklad pobieracza kolorow, znalazla sie taka notka:

1. Utwórz nowy projekt typy "Console application"
2. Wklej tam kod
3. Wejdź w opcje projektu (Projekt->Opcje projektu)
4. Przejdź do zakładki "Parametry"
5. Kliknij na "Dodaj plik"
6. W otwartym okienku przejdź do folderu, gdzie zainstalowany jest Dev-c++ i przejdź tam do katalogu "lib"
7. Zaznacz plik "libgdi32.a" i kliknij "Otwórz"
8. Po dodaniu pliku kliknij "OK" i skompiluj kod
postepujac krok po kroku, kompilator wywalil blad:
3743 C:\Dev-Cpp\include\winuser.h too few arguments to function `int ReleaseDC(HWND__*, HDC__*)'
jakies pomysly co dalej zrobic?
P-6956
TomekU
» 2009-05-17 15:52:53
Zamien
HDC Ekran = GetDC( NULL );
 na
HDC Ekran = GetDC( GetDesktopWindow() );
 i powinno byc ok. U mnie w VS 2k8 EE kompiluje i odpala sie bez problemu.
P-6962
robaczek122
Temat założony przez niniejszego użytkownika
» 2009-05-17 16:27:37
niestety dla mojego kompilatora jest to bez znaczenia dev-c++ 4.9.9.2
P-6963
« 1 » 2
  Strona 1 z 2 Następna strona