Programming Studio
PixelPanel

 

 

class PixelPanel

Formålet med PixelPanel er at lave simpel pixel grafisk; hvor der anvendes en grænsefalde bestående af relativ store pixels. Det er muligt at sætte farven på de enkelte pixels, og modtage events når der trykkes på tastaturet eller klikkes med musen på en pixel.
Bemærk, at når der i det følgende tales om pixels, menes der ikke skærm-pixels, men de pixel-lignende kvadrater, der optræder i pixel-panelet. Disse pixels optegnes med et grid, der fremhæver de enkelte pixels. Og når der tales om x- og y-koordinater, er det med en y-aksen der peger nedad, og med ( 0, 0 ) i panelets øverste venstre hjørne – også kaldet skærme-koordinater (bemærk dog flipY-metoden).

 

Konstruktorer

PixelPanel har en konstruktor, der tager antallet af pixels som parametre:

PixelPanel( int width, int height )

Dette vil åbne et vindue med pixel panelet.

 

Metoder

int getWidth()
int getHeight()

Returnerer højde og bredde af panelet, målt i pixels.

void setTitle( String title )
Sætter titlen på det vinduet (dette kræver ikke noget kald af update-metoden)
void clear( Color color )
Sætter alle pixels til den angivne farve.
void drawPixel( int x, int y, Color color )
Sætter farven på den pixel der har koordinaterne ( x, y ).
void drawLine( int x0, int y0, int x1, int y1, Color color )
Tegner en linie mellem ( x0, y0 ) og ( x1, y1 ) med farven color..
void drawRectangle( int x, int y, int width, int height, Color color )
Tegner et rektangel med øverste venstre hjørne ( x, y ), med bredde width og højde height, med farven color.
void drawImage( int x, int y, PixelImage image )
Tegner et image med øverste venstre hjørne i ( x, y ).
void fillRectangle( int x, int y, int width, int height, Color color )
Tegner et udfyldt rektangel med øverste venstre hjørne ( x, y ), med bredde width og højde height, med farven color.
void showGrid( boolean )
Afgør om der skal vises en grid mellem pixels (true) eller ej (false). Default er true. Grid-effekten giver PixelPanel et tydeligere pixel-præg, men er ikke altid ønskværdigt.
void flipY()
Ændrer orientering af y-aksen, så den vokser nedefra og op; hvilket kan være praktisk hvis man f.eks. tegner grafer af funktioner eller lign. Gentagne kald af denne metode vil skifte mellem om y-aksen vokser nedefra og op eller oppefra og ned.
void update()
Opdaterer de ændringer der er sket siden sidste kald af update-metoden (i.e. PixelPanel anvender double buffering)

 

Anvendelse

PixelPanel kan typisk initialiseres med følgende:
PixelPanel panel = new PixelPanel( 25, 25 );
panel.setTitle( "Eksempel" );
panel.clear( Colors.White );
panel.update();
Efterfølgende kan panelet anvendes på følgende vis:
panel.clear( Colors.White );
...
panel.drawPixel( 4, 7, Colors.Black );
panel.drawPixel( 8, 3, Colors.Red );
panel.drawPixel( 11, 21, Colors.Blue );
...
panel.update();
Hvor der anvendes en række draw-kald til at sætte farven på de pixels man måtte ønske

 

Lukning af vindue

PixelPanel-vinduet lukkes når man stopper programmet med stop (enten i menu'en eller i toolbar'en), eller programmet selv vælger at stoppe ved at kalde terminate-metoden. Vælger man selv at lukke vinduet stopper det samtidig programmet.

PixelPanel-vinduet lukkes ikke hvis programmet blot løber tør for sætninger at udføre, og event-handlere vil stadig kunne håndtere events fra PixelPanel-vinduet. Dette gør det muligt at lave programmer, der sætter PixelPanel op som ønsket; hvorefter event-handlere tager sig af den efterfølgende udførelse af programmet. I en sådan situation vil programmet endelig stoppe, når man vælger at lukke PixelPanel-vinduet.

 

class PixelImage

Denne klasse anvendes til håndtere images, som kan bruges i forbindelse med PixelPanel (se drawImage-metoden).
Man kan enten lave et PixelImage ved at lade programmet tegne det, eller ved at indlæse det fra en image-fil. Dette gøres med klassens to konstruktorer:
PixelImage( int width, int height )
PixelImage( String path )

Den første konstruktor lavet et image, hvor alle pixels er transparente (gennemsigtige). Den anden konstruktor indlæser et image fra en image-fil. Følgende fil-formater er understøttet: bmp, gif, exif, jpg, png og tiff. Ved indlæsning af image-filer er transparens understøttet, hvis fil-formatet understøtter det (f.eks. gif og png). Stien kan enten være absolut eller relativ ifht. programmets placering (der hvor kildetekst-filerne er placeret).

int getWidth()
int getHeight()

Returnerer henholdsvis bredden og højden af image.

void drawPixel( int x, int y, Color color )

Kan bruges til at tegne de enkelte pixels i et image.

Hvis man mangler en image-fil til at eksperimentere med, kan man anvende dette: , der også har transparente pixels.

 

class Color

Denne klasse bruges til at lave de farver der kan sættes på de enkelte pixels i et PixelPanel.

 

Konstruktorer

Color( int r, int g, int b )
Sætter farven med angivelse i RGB, idet parametrene skal ligge i intervallet 0-255.

 

Metoder

int getR()
int getG()
int getB()

Returnerer de enkelte RGB komponenter.

 

class Colors

Denne klasse indeholder en række prædefinerede farver (i.e. instancer af Color):
Colors.Black
Colors.White

Colors.LightGray
Colors.Gray
Colors.DarkGray

Colors.Yellow
Colors.Magenta
Colors.Cyan

Colors.Red
Colors.Green
Colors.Blue

Colors.DarkRed
Colors.DarkGreen
Colors.DarkBlue

Colors.LightRed
Colors.LightGreen
Colors.LightBlue

Colors.Orange
Colors.Olive
Colors.Brown
Colors.Salmon

Colors.Transparent
Transparent er den gennemsigtige farve. Den er reelt værdien null, som alternativt kan anvendes. F.eks.: ...drawPixel( 2, 2, null ).

 

Eksempler

Labyrinth Builder: Laver en labyrint med dybde først i en graf. Det bliver ikke nogen særlig god labyrint, men det ser flot ud rent grafisk. (kør evt. med 8x8 i højde og bredde, for at se hvor dårlig selve labyrinten bliver).