Kategorie materiałów Informatyka

Przedmiot: JAVA Programowanie Obiektowe Wróć do kategorii

Java - Grafika i multimedia w Javie [23 strony]

plik Pobierz Java - Grafika i multimedia w Javie [23 strony].doc

Jacek Rumiński - Język JAVA – Rozdział 6
6-3
Rozdział 6 Grafika i multimedia w Javie
6.1 Grafika (rysunki)
6.2 Czcionki
6.3 Kolor
6.4 Obrazy
6.5 Dźwięki
6.6 Java Media API
6.1 Grafika (rysunki)
Pakiet AWT zarówno w wersjach wcześniejszych jak i w wersji 2 wyposażony
jest w klasę Graphics, a od wersji 2 dodatkowo w klasę Graphics2D. Klasy te
zawierają liczne metody umożliwiające tworzenie i zarządzanie grafiką w Javie.
Podstawą pracy z grafiką jest tzw. kontekst graficzny, który jako obiekt posiada
właściwości konkretnego systemu prezentacji np. panelu. W AWT kontekst graficzny
jest dostarczany do komponentu poprzez następujące metody:
- paint
- paintAll
- update
- print
- printAll
- getGraphics
Obiekt graficzny (kontekst) zawiera informacje o stanie grafiki potrzebne dla
podstawowych operacji wykonywanych przez metody Javy. Zaliczyć tu należy
następujące informacje:
- obiekt komponentu, który będzie obsługiwany,
- współrzędne obszaru rysowania oraz obcinania,
- aktualny kolor,
- aktualne czcionki,
- aktualna funkcja operacji na pikselach logicznych (XOR lub Paint),
- aktualny kolor dla operacji XOR.
Posiadając obiekt graficzny można wykonać szereg operacji rysowania np.: Graphics
g;
g.drawLine(int x1, int y1, int x2, int y2) - rysuje linię pomiędzy współrzędnymi (x1,y1)
a (x2,y2), używając aktualnego koloru,
g.drawRect(int x, int y, int width, int height) - rysuje prostokąt o wysokości height i
szerokości width począwszy od punktu (x,y), używając aktualnego koloru,
g.drawString(String str, int x, int y) - rysuje tekst str począwszy od punktu (x,y),
używając aktualnego koloru i czcionki,
g.drawImage(Image img, int x, int y, Color bgcolor, ImageObserver observer) -
wyświetla aktualnie dostępny zestaw pikseli obrazu img na tle o kolorze bgcolor,
Jacek Rumiński - Język JAVA – Rozdział 6
6-4
począwszy od punktu (x,y)
g.setColor(Color c) - ustawia aktualny kolor c np. Color.red
g.setFont(Font font) - ustawia aktualny zestaw czcionek
W celu rysowania elementów grafiki konieczna jest znajomość układu współrzędnych
w ramach, którego wyznacza się współrzędne rysowania. Podstawowym układem
współrzędnych w Javie jest układ użytkownika, będący pewną abstrakcją układów
współrzędnych dla wszystkich możliwych urządzeń. Układ użytkownika definiowany
jest w sposób następujący.
Rysunek 6.1 Układ współrzędnych użytkownika
Układ współrzędnych konkretnego urządzenia może pokrywać się z układem
użytkownika lub nie. W razie potrzeby współrzędne z układu użytkownika są
automatycznie transformowane do właściwego układu współrzędnych danego
urządzenia.
Jako ciekawostkę można podać, że JAVA nie definiuje wprost metody umożliwiającej
rysowanie piksela, która w innych językach programowania służy często do
tworzenia obrazów. W Javie nie jest to potrzebne. Do tych celów służą liczne metody
drawImage(). Niemniej łatwo skonstruować metodę rysującą piksel np.
dddrrraaawPiiixxxeeelll(((Cooolllooorrr ccc,,, iiinnnttt xxx,,, iiinnnttt yyy))){{{
ssseeetttCooolllooorrr(((ccc)));;;
dddrrraaawLLLiiinnneee(((xxx,,,yyy,,,xxx,,,yyy)));;;
} }}
Pierwotne wersje AWT definiują kilka obiektów geometrii jak np. Point, Rectangle.
Elementy te są bardzo przydatne dlatego, że, co jest właściwe dla języków
obiektowych, nie definiujemy za każdym razem prostokąta za pomocą atrybutów
opisowych (współrzędnych) lecz przez gotowy obiekt - prostokąt, dla którego znane
są (różne metody) jego liczne właściwości.
Poniższa aplikacja umożliwia sprawdzenie działania prostych metod graficznych:
Przykład 6.1:
//Rysunki.java:
import java.awt.event.*;
Jacek Rumiński - Język JAVA – Rozdział 6
6-5
import java.awt.*;
public class Rysunki extends Frame {
Rysunki () {
super ("Rysunki");
setSize(200, 220);
}
public void paint (Graphics g) {
Insets insets = getInsets();
g.translate (insets.left, insets.top);
g.drawLine (5, 5, 195, 5);
g.drawLine (5, 75, 5, 75);
g.drawRect (25, 10, 50, 75);
g.fillRect (25, 110, 50, 75);
g.drawRoundRect (100, 10, 50, 75, 60, 50);
g.fillRoundRect (100, 110, 50, 75, 60, 50);
g.setColor(Color.red);
g.drawString ("Test grafiki",50, 100);
g.setColor(Color.black);
}
public static void main (String [] args) {
Frame f = new Rysunki ();
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.out.println("Dziekujemy za prace z programem...");
System.exit(0);
}
});
f.setVisible(true);
}
}// koniec public class Rysunki extends Frame
Wykorzystana w powyższym kodzie metoda translate() zmienia początek układu
współrzędnych przesuwając go do aktywnego pola graficznego (bez ramek).
Java2D API w sposób znaczny rozszerza możliwości graficzne AWT. Po pierwsze
umożliwia zarządzanie i rysowanie elementów graficznych o współrzędnych
zmiennoprzecinkowych (float i double). Własność ta jest niezwykle przydatna dla
różnych aplikacji m.in. dla aplikacji w medycynie (wymiarowanie, planowanie terapii,
projektowanie implantów, itp.). Ta podstawowa zmiana podejścia do rysowania
obiektów graficznych i geometrycznych powoduje powstanie, nowych, licznych klas i
metod. W sposób szczególny należy wyróżnić tutaj sposób rysowania nowych
elementów. Odbywa się to poprzez zastosowanie jednej metody:
Grrraaappphhhiiicccsss222D ggg222;;;
ggg222...dddrrraaaw(((Shhhaaapppeee sss)));;;
Metoda draw umożliwia narysowanie dowolnego obiektu implementującego interfejs
Shape (kształt). Przykładowo narysowanie linii o współrzędnych typu float można
wykonać w następujący sposób:
Jacek Rumiński - Język JAVA – Rozdział 6
6-6
LLLiiinnneee222D llliiinnniiiaaa === nnneeew LLLiiinnneee222D...FFFllloooaaattt(((222000...000fff,,, 111000...000fff,,, 111000000...000fff,,, 111000...000fff)));;;
ggg222...dddrrraaaw(((llliiinnniiiaaa)));;;
Oczywiście klasa Line2D implementuje interfejs Shape. Java2D wprowadza liczne
klasy w ramach pakietu java.awt.geom, np:
Arc2D.Double
Arc2D.Float
CubicCurve2D.Double
CubicCurve2D.Float
Dimension2D
Ellipse2D.Double
Ellipse2D.Float
GeneralPath
Line2D
Line2D.Double
Line2D.Float
Point2D
Point2D.Double
Point2D.Float
QuadCurve2D.Double
QuadCurve2D.Float
Rectangle2D
Rectangle2D.Double
Rectangle2D.Float
RoundRectangle2D.Double
RoundRectangle2D.Float
W celu skorzystania z tych oraz innych dobrodziejstw jakie wprowadza Java2D
należy skonstruować obiekt graficzny typu Graphics2D. Ponieważ Graphics2D
rozszerza klasę Graphics, to konstrukcja obiektu typu Graphics2D polega na:
Grrraaappphhhiiicccsss222D ggg222 === (((Grrraaappphhhiiicccsss222D))) ggg;;;
gdzie g jest obiektem graficznym otrzymywanym jak omówiono wyżej.
Uwaga! Argumentem metody paint komponentów jest obiekt klasy Graphics a nie
Graphics2D.
Dodatkowe klasy w AWT wspomagające grafikę to BasicStroke oraz TexturePaint.
Pierwsza z nich umożliwia stworzenie właściwości rysowanego obiektu takich jak np.:
szerokość linii, typ linii. Przykładowo ustawienie szerokości linii na 12 punktów
odbywać się może poprzez zastosowanie następującego kodu:
gggrrruuubbbaaaLLLiiinnniiiaaa === nnneeew BaaasssiiicccStttrrroookkkeee(((111222...000fff)));;;
ggg222...ssseeetttStttrrroookkkeee(((gggrrruuubbbaaaLLLiiinnniiiaaa)));;;
Klasa TexturePoint umożliwia wypełnienie danego kształtu (Shape) określoną
teksturą. Do dodatkowych zalet grafiki w Java2D należy zaliczyć:
- sterowanie jakością grafiki (np. antyaliasing, interpolacje)
Jacek Rumiński - Język JAVA – Rozdział 6
6-7
- sterowanie przekształceniami geometrycznymi (przekształcenia sztywne - affiniczne
- klasa AffineTransform),
- sterowanie przeźroczystością elementów graficznych,
- bogate narzędzia do zarządzania czcionkami i rysowania tekstu,
- narzędzia do drukowania grafiki,
- inne.
Przykładowa aplikacja ukazująca proste elementy grafiki w Java2D
Przykład 6.2:
//Rysunki2.java:
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.*;
public class Rysunki2 extends Frame {
Rysunki2 () {
super ("Rysunki2");
setSize(200, 220);
}
public void paint (Graphics g) {
Graphics2D g2 = (Graphics2D) g;
Insets insets = getInsets();
g2.translate (insets.left, insets.top);
Line2D linia = new Line2D.Float(20.0f, 20.0f, 180.0f, 20.0f);
g2.draw(linia);
BasicStroke grubaLinia = new BasicStroke(6.0f);
g2.setStroke(grubaLinia);
g2.setColor(Color.red);
Line2D linia2 = new Line2D.Float(20.0f, 180.0f, 180.0f, 180.0f);
g2.draw(linia2);
g2.drawString ("Test grafiki",50, 100);
g2.setColor(Color.black);
}
public static void main (String [] args) {
Frame f = new Rysunki2 ();
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.out.println("Dziekujemy za prace z programem...");
System.exit(0);
}
});
f.setVisible(true);
}
} // koniec public class Rysunki2 extends Frame
Jacek Rumiński - Język JAVA – Rozdział 6
6-8
6.2 Czcionki
W Javie można korzystać z różnych typów czcionek, które związane są z daną
platformą na jakiej pracuje Maszyna Wirtualna. Dostęp do czcionek odbywa się
poprzez trzy typy nazw: nazwy logiczne czcionek, nazwy czcionek, nazwy rodziny
czcionek. Nazwy logiczne czcionek to nazwy zdefiniowane dla Javy. Możliwe są
następujące nazwy logiczne czcionek w Javie: Dialog, DialogInput, Monospaced,
Serif, SansSerif, oraz Symbol. Nazwy logiczne są odwzorowywane na nazwy
czcionek powiązane z czcionkami dla danego systemu. Odwzorowanie to występuje
w pliku font.properties znajdującego się w katalogu lib podkatalogu jre (Java Runtime
Engine). W pliku tym zdefiniowano również sposób kodowania znaków. Z tego
powodu w zależności od sposobu kodowania i typów wykorzystywanych czcionek
definiowane są różne pliki font.properties z odpowiednim rozszerzeniem np.
font.properties.pl. Przykładowe fragmenty plików opisujący właściwości czcionek to
np.:
//////Wiiinnndddooowsss NTTT fffooonnnttt...ppprrrooopppeeerrrtttiiieeesss:::
(((.........)))
ssseeerrriiifff...000===TTTiiimeeesss Neeew Rooomaaannn,,,ANSIII___CHARSETTT
ssseeerrriiifff...111===WiiinnngggDiiinnngggsss,,,SYMBOLLL___CHARSETTT,,,NEED___CONVERTTTED
(((.........)))
//////Sooolllaaarrriiisss fffooonnnttt...ppprrrooopppeeerrrtttiiieeesss...ppplll:::
(((......)))
ssseeerrriiifff...ppplllaaaiiinnn...000===---llliiinnnoootttyyypppeee---tttiiimeeesss---meeedddiiiuuum---rrr---nnnooorrrmaaalll------***---%ddd---***---***---ppp---***---iiisssooo888888555999---111
ssseeerrriiifff...111===---mooonnnoootttyyypppeee---tttiiimeeesssnnneeewrrrooomaaannn---rrreeeggguuulllaaarrr---rrr---nnnooorrrmaaalll------***---%ddd---***---***---ppp---***---iiisssooo888888555999---222
(((.........)))
Różnica pomiędzy nazwą logiczną czcionek w Javie a ich nazwami jest niewielka,
np. nazwa logiczna Serif, nazwa serif. Różnice nazw ukazuje poniższy program:
Przykład 6.3:
//Nazwy.java
import java.awt.*;
public class Nazwy {
private Font f;
Nazwy (){
f = new Font("Serif",Font.PLAIN,12);
System.out.println("Oto nazwa logiczna czcionki Serif: "+f.getName());
System.out.println("Oto nazwa czcionki Serif: "+f.getFontName());
f = new Font("SansSerif",Font.PLAIN,12);
System.out.println("Oto nazwa logiczna czcionki SansSerif: " + f.getName());
System.out.println("Oto nazwa czcionki SansSerif: " +f.getFontName());
f = new Font("Dialog",Font.PLAIN,12);
System.out.println("Oto nazwa logiczna czcionki Dialog: "+f.getName());
System.out.println("Oto nazwa czcionki Dialog: "+f.getFontName());
Jacek Rumiński - Język JAVA – Rozdział 6
6-9
f = new Font("DialogInput",Font.PLAIN,12);
System.out.println("Oto nazwa logiczna czcionki DialogInput: " + f.getName());
System.out.println("Oto nazwa czcionki DialogInput: "+ f.getFontName());
f = new Font("Monospaced",Font.PLAIN,12);
System.out.println("Oto nazwa logiczna czcionki Monospaced: "+ f.getName());
System.out.println("Oto nazwa czcionki Monospaced: "+ f.getFontName());
f = new Font("Symbol",Font.PLAIN,12);
System.out.println("Oto nazwa logiczna czcionki Symbol: "+ f.getName());
System.out.println("Oto nazwa czcionki Symbol: "+f.getFontName());
}
public static void main(String args[]){
Nazwy czcionki = new Nazwy();
}
}// koniec public class Nazwy
W pracy z Javą w celu stworzenia uniwersalnego kodu należy korzystać z nazw
logicznych. Dla danej platformy można oczywiście używać nazw fontów tam
zainstalowanych. W celu uzyskania informacji o zainstalowanych czcionkach na
danej platformie należy posłużyć się metodami klasy GraphicsEnvironment (w
poprzednich wersjach JDK należało korzystać z metody getFontList() klasy Toolkit).
Poniższy program ukazuje zainstalowane czcionki w systemie poprzez podanie nazw
rodzin czcionek oraz poszczególnych nazw.
Przykład 6.4:
//Czcionki.java:
import java.awt.*;
import java.awt.event.*;
public class Czcionki extends Frame {
public String s[];
private Font czcionki[];
private Font f;
Czcionki (String nazwa){
super(nazwa);
f = new Font("Verdana",Font.BOLD,12);
s=GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
czcionki=GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts();
}
public static void main(String args[]){
Czcionki okno = new Czcionki("Lista czcionek");
okno.setSize(600,500);
okno.setLayout(new GridLayout(2,1));
Jacek Rumiński - Język JAVA – Rozdział 6
6-10
List lista1 = new List(1, false);
for (int i=0; i<okno.s.length; i++){
lista1.add(okno.s[i]);
}
lista1.setFont(okno.f);
okno.add(lista1);
List lista2 = new List(1, false);
for (int i=0; i<okno.czcionki.length; i++){
lista2.add(okno.czcionki[i].toString());
}
lista2.setFont(okno.f);
okno.add(lista2);
okno.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.out.println("Dziekujemy za prace z programem...");
System.exit(0);
}
});
okno.setVisible(true);
}
}// koniec public class Czcionki
Pełny opis czcionek można uzyskać posługując się metodami zdefiniowanymi w
klasie FontMetrics. Podstawowe metody umożliwiają między innymi uzyskanie
informacji o szerokości znaku lub znaków dla wybranej czcionki (charWithd(),
charsWidth()), o wysokości czcionki (getHight()), o odległości między linią bazową
czcionki a wierzchołkiem znaku (getAscent()), o odległości między linią bazową
czcionki a podstawą znaku (getDescent()), itd.
Ustawianie czcionek dla danego komponentu polega na stworzeniu obiektu klasy
Font a następnie na wywołaniu metody komponentu setFont(), np.:
(((.........)))
Cooompppooonnneeennnttt ccc;;;
(((.........)))
FFFooonnnttt fff === nnneeew FFFooonnnttt (((„„„Arrriiiaaalll”””,,, FFFooonnnttt...PLLLAIIIN,,, 111222)));;;
ccc...ssseeetttFFFooonnnttt(((fff)));;;
(((.........)))
Wywołanie konstruktora klasy Font w powyższym przykładzie wymaga określenia
nazwy lub nazwy logicznej czcionki, stylu, oraz rozmiaru czcionki. Styl czcionki może
być określony przez następujące pola klasy Font:
Font.PLAIN – tekst zwykły,
Font.ITALIC – tekst pochyły (kursywa),
Font.BOLD – tekst pogrubiony,
Font.ITALIC + Font.BOLD – tekst pogrubiony i pochyły.
Jacek Rumiński - Język JAVA – Rozdział 6
6-11
Do tej pory omówione zostały podstawowe własności grafiki dostarczanej przez
Java2D z pominięciem obsługi obrazów i kolorów. Zarządzanie kolorami i metody
definiowania, wyświetlania i przetwarzania obrazów są niezwykle istotne z punktu
widzenia aplikacji medycznych. Dlatego teraz te zagadnienia zostaną osobno
omówione.
6.3 Kolor
Kolor jest własnością postrzegania promieniowania przez człowieka. Średni
obserwator (definiowany przez różne organizacje normalizacyjne) postrzega
konkretne kolory jako wynik rejestracji promieniowania elektromagnetycznego o
konkretnych długościach fal. Ponieważ system wzrokowy człowieka wykorzystuje trz ...

Ciąg dalszy w pliku do pobrania.

Wkuwanko.pl jako podmiot świadczący usługę hostingu materiałów edukacyjnych nie ponosi odpowiedzialności za ich zawartość.

Aby zgłosić naruszenie prawa autorskiego napisz do nas.

ikona Pobierz ten dokument

Wróć do kategorii

wkuwanko.pl

Wasze komentarze: dodaj komentarz

  • Nie ma jeszcze komentarzy do tego materiału.

Materiały w kategorii JAVA Programowanie Obiektowe [19]

  • podgląd pobierz opis Definiowanie własnych klas
  • podgląd pobierz opis Interfejsy
  • podgląd pobierz opis Java - Aplety, grafika w Javie [35 stron]
  • podgląd pobierz opis Java - Grafika i multimedia w Javie [23 strony]
  • podgląd pobierz opis Java - Konstrukcja kodu [30 stron]
  • podgląd pobierz opis Java - Programowanie obiektowe [24 strony]
  • podgląd pobierz opis Java - Tworzenie i obsługa programów [20 stron]
  • podgląd pobierz opis Java - wprowadzenie [6 stron]
  • podgląd pobierz opis Kolekcje
  • podgląd pobierz opis Kompozycja i dziedziczenie
  • podgląd pobierz opis Laboratorium1
  • podgląd pobierz opis Metody i języki programowania - Zadania
  • podgląd pobierz opis Podstawy języka Java
  • podgląd pobierz opis Polimorfizm i metody wirtualne
  • podgląd pobierz opis Programowanie GUI
  • podgląd pobierz opis Streszczenie
  • podgląd pobierz opis Wątki
  • podgląd pobierz opis Wstęp do programowania w języku Java
  • podgląd pobierz opis Zagadnienia na EGZAMIN
[ Misja ] [ Regulamin ] [ Kontakt ] [ Reklama ]   © wkuwanko.pl 2008-2018 właściciel serwisu SZLIFF

Partnerzy: matzoo.pl matmag.pl batmat.pl onlinefm.pl pisupisu.pl Matematyka radio online