Aplikacja do matrycy led

problemy z tworzeniem aplikacji graficznych oraz audio i wideo

Aplikacja do matrycy led

Nowy postprzez kamil007 » czwartek, 6 stycznia 2011, 21:10

Witam!
Chciałem sobie napisać aplikację symulujacą moją matrycę led. Matryca zbudowana jest z 16 elementów każdy 8x8 pixeli (diody led). 16 elementów twożą dwa rzędy po 8 elementów. Co daje 64 kolumny na 16 wierszy.
Za pomącą poradników http://programowanie.cal.pl/cyfbar/grafika.html skleiłem programik, który rysuje taka matrycę, i wypełnia ją pixelami (kółeczkami).
Teraz mam pytanie, jak zrobić zdarzenie dla pojedynczego kółeczka, np: lewy przycisk myszki wypełnia go na czerwono, a prawy go czyści? Dało by mi to możliwość rysowania prostej grafiki.
Teraz program wygląda tak:
Kod: Zaznacz cały
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
   : TForm(Owner)
{ DoubleBuffered = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button1Click(TObject *Sender)

{
int i ;
int j ;
int x=100 ;
int y =100 ;
Image1->Canvas->Pen->Color = clBlack;
Image1->Canvas->Pen->Width = 1;
Image1->Canvas->MoveTo(0,100);                        // Dzielę ekran na pół linią w poziomie
Image1->Canvas->LineTo(800,100);

for (i = 0; i < 8; i++)                              // Dzielę ekran linią w pionie na 8 równych pól
{
Image1->Canvas->MoveTo(x,0);
Image1->Canvas->LineTo(y,200);
x=x+100;
y=y+100;
}
Image1->Canvas->Pen->Color = clLtGray;
float a =1.5 ;
float b =9.5 ;
float c =1.5 ;
float d =9.5;
for (j = 0; j < 16; j++)                     // Rysuję kółka w 16 wierzach
{
for (i = 0; i < 64; i++)                   // Rysuje kółka w 64 kolumnach
{
   Image1->Canvas->Ellipse(a,c,b,d) ;
   a=a+12.5;
   b=b+12.5;
}
c=c+12.5;
d=d+12.5;
a =1.5;
b =9.5 ;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button2Click(TObject *Sender)
{
Image1->Picture->SaveToFile("d:\\image.bmp");

}
//---------------------------------------------------------------------------

bool draw = false;
TPoint OldPos;


void __fastcall TForm2::Image1MouseDown(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
   draw = true;
OldPos = Point(X, Y);

}
//---------------------------------------------------------------------------
void __fastcall TForm2::Image1MouseUp(TObject *Sender, TMouseButton Button,
     TShiftState Shift, int X, int Y)
{
draw = false;

}
//---------------------------------------------------------------------------


void __fastcall TForm2::Image1MouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
    if(draw)
{
  Image1->Canvas->MoveTo(OldPos.x, OldPos.y);
  OldPos = Point(X, Y);
  Image1->Canvas->LineTo(X, Y);
}

}





Czy taka koncepcja rysowania jest słuszna, czy taki progs musiał by wyglądać zupełnie inaczej?
Avatar użytkownika
kamil007
Bladawiec
Bladawiec
 
Posty: 16
Dołączył(a): środa, 20 października 2010, 20:11
Podziękował : 1
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: C++ Builder 2007
Gadu Gadu: 0
    Windows 7Internet Explorer 8

Re: Aplikacja do matrycy led

Nowy postprzez Cyfrowy Baron » czwartek, 6 stycznia 2011, 22:49

Do wypełniania zamkniętego obszaru kolorem służy funkcja FloodFill w klasie TCanvas. Zapoznaj się w serwisie Cyfrowy Baron w dziale: porady -> grafika, z poradą Wypełnianie obszaru kolorem (tzw. wiadro).
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Aplikacja do matrycy led

Nowy postprzez kamil007 » czwartek, 6 stycznia 2011, 23:35

Dobra poćwiczę to ;)
Ale wpadłem na pomysł taki. Rysuję jeden prostokąt, a potem drugi żeby się częściowo nakładały. Jak pokolorować część współną :?:
Wtedy bym myszką rysował prostokąt- zaznaczanie ( widziałem parę tematów niżej przykład), i jak bym puszczał przycisk przerysowywał bym kułeczka i kolorował tylko te które sie nakładają na prostokąt-zanaczanie. :) Tylko jak to zrobić :roll:
Avatar użytkownika
kamil007
Bladawiec
Bladawiec
 
Posty: 16
Dołączył(a): środa, 20 października 2010, 20:11
Podziękował : 1
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: C++ Builder 2007
Gadu Gadu: 0
    Windows 7Internet Explorer 8

Re: Aplikacja do matrycy led

Nowy postprzez Cyfrowy Baron » piątek, 7 stycznia 2011, 09:22

Stworzyć algorytm który to obliczy, nie da się inaczej, no chyba że prostokąty będą miały tylko obrys bez wypełnienia, wtedy można użyć funkcji FloodFill.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Aplikacja do matrycy led

Nowy postprzez Corvis » piątek, 7 stycznia 2011, 09:56

Nie prościej to zrobić na StringGridzie ?
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaChrome

Re: Aplikacja do matrycy led

Nowy postprzez Cyfrowy Baron » piątek, 7 stycznia 2011, 10:57

Jeszcze prościej byłoby skorzystać z pakietu komponentów TMS Instrumentation Workshop, które oferują gotowe panele LED, ale to komponenty komercyjne. Do obsługi grafiki w tabeli znacznie lepszy jest komponent TDrawGrid, o istnieniu którego nikt zdaje się nie wiedzieć, a występuje on we wszystkich wersjach środowiska C++Builder.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Aplikacja do matrycy led

Nowy postprzez kamil007 » piątek, 7 stycznia 2011, 18:22

To rysowanie to ma być taki bajer ;) , zawsze mogę coś nabazgrać nawet w paint.
Podstawową funkcją programu ma być wyświetlenie np: w Label bitmapy w reprezentacji bajtowej. Czyli wczytuje sobie bitmapkę 80px16px, oczywiście monochromatyczną. A programik robi mi taka tablicę bajtów, nawet jedno wymiarową i wyświetla to na etykiecie.
Bo tak na piechotę jak bym chciał sobie zroibć nawet małą grafike to sie idzie za....ć . :shock:
Avatar użytkownika
kamil007
Bladawiec
Bladawiec
 
Posty: 16
Dołączył(a): środa, 20 października 2010, 20:11
Podziękował : 1
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: C++ Builder 2007
Gadu Gadu: 0
    Windows 7Internet Explorer 8

Re: Aplikacja do matrycy led

Nowy postprzez Cyfrowy Baron » piątek, 7 stycznia 2011, 18:35

Klasa TLabel nie obsługuje grafiki, tylko tekst...
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Aplikacja do matrycy led

Nowy postprzez kamil007 » piątek, 7 stycznia 2011, 18:48

No właśnie, ja chcę tekst :D
Kod: Zaznacz cały
np:  unsigned char Data[ ]={ 0xFF , ..., ..., ..., ..., ..., ..., 0xCF,   //Pierwszy weirsz BMP
                                          0xFF , ..., ..., ..., ..., ..., ..., 0xCF,  // Drugi wiersz BMP
                                          0xFF , ..., ..., ..., ..., ..., ..., 0xCF,

                                          0xFF , ..., ..., ..., ..., ..., ..., 0xCF, }//Szesnasty wiersz
Avatar użytkownika
kamil007
Bladawiec
Bladawiec
 
Posty: 16
Dołączył(a): środa, 20 października 2010, 20:11
Podziękował : 1
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: C++ Builder 2007
Gadu Gadu: 0
    Windows 7Internet Explorer 8

Re: Aplikacja do matrycy led

Nowy postprzez Cyfrowy Baron » piątek, 7 stycznia 2011, 19:56

W środowisku C++Builder 2007 obiekt Label wyświetla Tobie symbol 0xFF, czyli ÿ?
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Aplikacja do matrycy led

Nowy postprzez kamil007 » piątek, 7 stycznia 2011, 22:22

Nie mogę załapać. Chcesz mnie na coś naprowadzić ,czy sie nabijasz?.
Nie jestem zawodowcem, pisze bardzo, ale to bardzo amatorsko. Poprostu przydał by mi sie taki progs. :)
Avatar użytkownika
kamil007
Bladawiec
Bladawiec
 
Posty: 16
Dołączył(a): środa, 20 października 2010, 20:11
Podziękował : 1
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: C++ Builder 2007
Gadu Gadu: 0
    Windows 7Internet Explorer 8

Re: Aplikacja do matrycy led

Nowy postprzez Cyfrowy Baron » piątek, 7 stycznia 2011, 23:24

Nie, nie nabijam się. Podałeś, że chcesz w label wprowadzić znak o wartości 0xFF co odpowiada literze ÿ. Z tego co pamiętam to w C++Builder przed wersją 2009 nie można do Label wprowadzać znaków Unicode, a ta litera to właśnie taki znak.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Aplikacja do matrycy led

Nowy postprzez kamil007 » piątek, 7 stycznia 2011, 23:54

Tak miał wyglądać już końcowy etap. Zacznę od początku. Jetsem na etapie wyświetlania na komponencie Image1
bitmapy (małej bmp 80px na 16px), przerabiam ją według twojego przykładu na czarno białą. Wszystko jest chyba Ok. bo przerabia. :) .
Teraz potrzebuję na jakimś komponenicie wyświetlić linia po lini, stan tych pixeli , pomyślałem o Label. Myślałem że to będzie tak biały to 1 , czarny to 0. Czyli nP: pierwsza linia : 1,1,1,0,0,1,0,1..........,1,0 // 80 bitów
A tamto to miał by być juz efekt końcowy taka tablica bajtów.
Avatar użytkownika
kamil007
Bladawiec
Bladawiec
 
Posty: 16
Dołączył(a): środa, 20 października 2010, 20:11
Podziękował : 1
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: C++ Builder 2007
Gadu Gadu: 0
    Windows 7Internet Explorer 8

Re: Aplikacja do matrycy led

Nowy postprzez Cyfrowy Baron » sobota, 8 stycznia 2011, 11:24

Najlepiej będzie do tego celu użyć obiektu typu TMemo. Niezależnie jednak jakiego obiektu użyjesz to musisz wiedzieć, że w C++Builder 2007 obiekty nie obsługują znaków Unicode.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Aplikacja do matrycy led

Nowy postprzez polymorphism » sobota, 8 stycznia 2011, 12:15

Stringa z ciągiem bajtów możesz sobie złożyć przy pomocy strumienia ostringtream:

KOD cpp:     UKRYJ  
ostringstream oss;

oss << "unsigned char Data[] = { ";

/* przykładowe wypełnienie */
for(int i = 0; i < 256; ++i)
{
        oss << "0x"
                << setw(2)
                << setfill('0')
                << hex
                << (unsigned int)i;

        if(i != 255) oss << ", ";
}

oss << " };";

cout << oss.str();
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Następna strona

  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Aplikacje multimedialne, graficzne

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 1 gość

cron