Ĺadny brzuch
Witam!
Babram się ze swoim programem graficznym do transformacji 3d i co raz muszę coś zmieniać, bo taki jest np. wymóg pamięciowy (komputer nie może operować na zbyt duzych tablicach). W każdym razie muszę pobrać kolor piksela o określonych współrzędnych x i y. Do tego celu NIE MOGĘ użyć RGBQUAD - po pierwsze dlatego żeby kod był czytelniejszy, po drugie RGBQUAD ma pewne ograniczenia. Muszę się odwołać przez Picture->Bitmap->Pixels[x][y]
Mój kod jest taki:
Plik nagłówkowy (tylko struktury przeze mnie napisane):
// struktura opisująca kolor typedef struct kolor2d_typ { TColor kolor; } kolor2d, *kolor2d_ptr; // współrzędne pixela oraz jego kolor typedef struct pixel2d_typ { kolor2d p2d[1000][1000]; } pixel2d, *pixel2d_ptr;
Plik źródłowy:
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Pikselix.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TPikselix_main *Pikselix_main; // zmienne int x, y; // współrzędne obrazka pixel2d p_xy; // mój typ zmiennej //--------------------------------------------------------------------------- __fastcall TPikselix_main::TPikselix_main(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TPikselix_main::Btn_TerminateClick(TObject *Sender) { Application->Terminate(); } //--------------------------------------------------------------------------- void __fastcall TPikselix_main::Btn_LoadClick(TObject *Sender) { if (OD_Load_image->Execute()) Im_pikseloza->Picture->LoadFromFile(OD_Load_image->FileName); } //--------------------------------------------------------------------------- void __fastcall TPikselix_main::Btn_GetClick(TObject *Sender) { if (Im_pikseloza->Picture->Bitmap->Empty) ShowMessage("Musisz załadować obrazek bmp"); else { Im_pikseloza->Picture->Bitmap->PixelFormat=pf32bit; // pobranie współrzędnych x=StrToInt(E_x->Text); y=StrToInt(E_x->Text); // pobranie koloru piksela p_xy.p2d[x][y].kolor=Im_pikseloza->Picture->Bitmap->Canvas->Pixels[ y][x]; // wyswietlenie koloru piksela w oknie Kolor Piksela: E_kolor->Text=p_xy.p2d[x][y].kolor; } } //--------------------------------------------------------------------------- void __fastcall TPikselix_main::Im_pikselozaMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { // pobranie współrzędnych E_x->Text=X; E_y->Text=Y; }
Nie jest to oczywiście cały program, a tylko ta część która pobiera dane piksela.
Jeżeli ktoś wie jak to zrobić byłbym bardzo wdzięczny za pomoc.
Oczekuję konkretnych porad. :]
Pozdrawiam!
Chciałbym zakomunikować wszystkim zainteresowanym moim problemem, że udało mi się już uzyskać odpowiedź na problem, który powyżej przedstawiłem. :D :D :D
Rozwiązanie znajduje się na http://warsztat.pac.pl , na Forum ,
w dziale Szkółka-Grafika,
pod tytułem: "Odczytywanie i ustawianie koloru piksela w BCB_6".
Pozdrawiam! :)
P.S. Jeszcze raz:
DZIĘKI revo i bies !!! :D
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Babram się ze swoim programem graficznym do transformacji 3d i co raz muszę coś zmieniać, bo taki jest np. wymóg pamięciowy (komputer nie może operować na zbyt duzych tablicach). W każdym razie muszę pobrać kolor piksela o określonych współrzędnych x i y. Do tego celu NIE MOGĘ użyć RGBQUAD - po pierwsze dlatego żeby kod był czytelniejszy, po drugie RGBQUAD ma pewne ograniczenia. Muszę się odwołać przez Picture->Bitmap->Pixels[x][y]
Mój kod jest taki:
Plik nagłówkowy (tylko struktury przeze mnie napisane):
// struktura opisująca kolor typedef struct kolor2d_typ { TColor kolor; } kolor2d, *kolor2d_ptr; // współrzędne pixela oraz jego kolor typedef struct pixel2d_typ { kolor2d p2d[1000][1000]; } pixel2d, *pixel2d_ptr;
Plik źródłowy:
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Pikselix.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TPikselix_main *Pikselix_main; // zmienne int x, y; // współrzędne obrazka pixel2d p_xy; // mój typ zmiennej //--------------------------------------------------------------------------- __fastcall TPikselix_main::TPikselix_main(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TPikselix_main::Btn_TerminateClick(TObject *Sender) { Application->Terminate(); } //--------------------------------------------------------------------------- void __fastcall TPikselix_main::Btn_LoadClick(TObject *Sender) { if (OD_Load_image->Execute()) Im_pikseloza->Picture->LoadFromFile(OD_Load_image->FileName); } //--------------------------------------------------------------------------- void __fastcall TPikselix_main::Btn_GetClick(TObject *Sender) { if (Im_pikseloza->Picture->Bitmap->Empty) ShowMessage("Musisz załadować obrazek bmp"); else { Im_pikseloza->Picture->Bitmap->PixelFormat=pf32bit; // pobranie współrzędnych x=StrToInt(E_x->Text); y=StrToInt(E_x->Text); // pobranie koloru piksela p_xy.p2d[x][y].kolor=Im_pikseloza->Picture->Bitmap->Canvas->Pixels[ y][x]; // wyswietlenie koloru piksela w oknie Kolor Piksela: E_kolor->Text=p_xy.p2d[x][y].kolor; } } //--------------------------------------------------------------------------- void __fastcall TPikselix_main::Im_pikselozaMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { // pobranie współrzędnych E_x->Text=X; E_y->Text=Y; }
Nie jest to oczywiście cały program, a tylko ta część która pobiera dane piksela.
Jeżeli ktoś wie jak to zrobić byłbym bardzo wdzięczny za pomoc.
Oczekuję konkretnych porad. :]
Pozdrawiam!
Chciałbym zakomunikować wszystkim zainteresowanym moim problemem, że udało mi się już uzyskać odpowiedź na problem, który powyżej przedstawiłem. :D :D :D
Rozwiązanie znajduje się na http://warsztat.pac.pl , na Forum ,
w dziale Szkółka-Grafika,
pod tytułem: "Odczytywanie i ustawianie koloru piksela w BCB_6".
Pozdrawiam! :)
P.S. Jeszcze raz:
DZIĘKI revo i bies !!! :D