Modelul de īmpingere este implementat īn pachetul de clase java.awt si este un model simplu de filtre de producatori si consumatori (producer/consumer) pentru procesarea de imagini. O imagine este reprezentata de un obiect de tip Image si este o abstractizare care nu este manipulata direct, ci mai degrab 454g62e 59; este folosita pentru a obtine o referinta catre un alt obiect care implementeaza interfata ImageProducer. Obiectele care implementeaza aceasta interfata sunt apoi atasate la obiecte care implementeaza interfata ImageConsumer.
Obiectele filtru implementeaza amāndoua interfetele, de producator si consumator si pot sa joace rolul de sursa sau destinatie pentru datele imagine. Datele imagine au asociate un obiect ColorModel care descrie configuratia pixelilor din imagine, precum si modul de interpretare a datelor.
Pentru a procesa imagini folosind modelul de īmpingere, un obiect Image este obtinut dintr-o sursa oarecare, de exemplu printr-un apel la metoda Applet.getImage(). Metoda Image.getSource() poate apoi fi folosita pentru a obtine ImageProducer-ul pentru acel Image. O serie de obiecte de tip FilteredImageSource pot fi atasate la ImageProducer, fiecare filtru fiind un ImageConsumer a imaginii sursa precedente.
Clasa FilteredImageSource este o implementare a interfetei ImageProducer care preia o imagine si un obiect filtru si le foloseste pentru a produce date imagine continānd imaginea filtrata. Īn fragmentul de cod urmator (Exemplul 7.1.) se prezinta o filtrare a unei imagini folosind un filtru de convolutie:
Exemplul 7.1. Utilizarea modelului de īmpingere pentru realizarea unei operatii de convolutie a unei imagini |
Image src = getImage(getDocumentBase(),"floare.gif"); ImageProducer prod = src.getSource(); ImageFilter filter = new BufferedImageFilter( new ConvolveOp(new Kernel(3,3, new float[] ))); Image img = createImage(new FilteredImageSource (src.getSource(),filter)); |
Procesarea de imagini īn AWT defineste doar cāteva filtre simple pentru ajustarea imaginilor si pentru manipulari ale canalelor de culoare.
Destinatia finala a imaginilor filtrate este un obiect Image, care poate fi creat printr-un apel la metoda Component.createImage(). Odata creat consumatorul de imagine, imaginea poate fi desenata pe ecran printr-un apel la metoda Image.getGraphics() pentru a obtine un obiect de tip Graphics, care reprezinta un dispozitiv ecran, urmat de apelul Graphics.drawImage().
Procesarile de imagini din AWT au fost concepute pentru a facilita afisarea de imagini īntr-un browser Web. Īn acest context o imagine poate fi rezidenta undeva īn retea si nu se poate garanta ca acea imagine va fi disponibila atunci cānd este nevoie, asa ca modelul AWT nu forteaza filtrarea imaginii sau completarea afisarii imaginii, fiind un model īn īntregime de īmpingere.
Un ImageConsumer nu poate niciodata sa solicite datele, el trebuie sa astepte dupa ImageProducer pentru a "īmpinge" datele spre el. Īn mod similar, un ImageConsumer nu are nici o informatie despre momentul cānd datele vor fi trimise īn īntregime, acesta trebuie sa astepte un apel la metoda ImageComplete() pentru ca sa afle cānd are imaginea completa. O aplicatie poate de asemenea instantia un obiect de tip ImageObserver daca doreste sa fie īnstiintata despre īncheierea unei operatii de procesare a imaginilor.
Procesarile de imagini din AWT nu au adoptat ideea unei imagini care este sustinuta prin stocarea ei permanent. Atāt timp cāt sunt furnizate metodele pentru a converti o arie de memorie de intrare īntr-un ImageProducer, sau pentru a captura o arie de memorie dintr-un ImageProducer, nu exista notiunea de obiect imagine persistent care sa poata fi reutilizat. Atunci cānd este nevoie de date de la un Image, trebuie sa obtinem o referinta spre ImageProducer-ul imaginii.
Modelul AWT nu poate fi folosit pentru dezvoltarea de cod de procesare a imaginilor foarte performant din cauza modelului de īmpingere, lipsei unui obiect imagine persistent, modelului restrictionat al unui filtru imagine si a unui numar mic de formate de date imagine. De asemenea lipsesc cāteva concepte de baza care sunt des folosite īn procesarea de imagini, cum ar fi operatiile executate pe o regiune de interes a unei imagini.
Īn Tabelul 7.2. sunt prezentate clasele si interfetele care sunt folosite de modelul de īmpingere AWT.
Clasa/Interfata |
Descriere |
Image |
Superclasa pentru toate clasele care reprezinta imagini grafice |
ColorModel |
Clasa abstracta care īncapsuleaza metodele pentru translatarea valorii unui pixel spre componentele culorii (ex. , rosu, verde, albastru) si o componenta alfa. |
FilteredImageSource |
O implementare a interfetei ImageProducer care preia imaginea existenta si un obiect filtru si le utilizeaza pentru a produce date imagine pentru o noua versiune filtrata a imaginii originale |
ImageProducer |
Interfata pentru obiectele care pot produce date imagine pentru obiecte Image. Fiecare imagine contine un ImageProducer care este folosit pentru reconstructia imaginii oricānd este nevoie, de exemplu, atunci cānd imaginea este scalata si are alte dimensiuni, sau cānd latimea sau īnaltimea imaginii este solicitata. |
ImageConsumer |
Interfata pentru obiectele care īsi manifesta interesul asupra datelor imagine prin interfata ImageProducer. Cānd este adaugat un consumator la un producator de imagine, producatorul trimite toate datele despre imagine folosind apeluri de metode definite īn aceasta interfata. |
ImageObserver |
Interfata asincrona de actualizare pentru receptionarea de notificari cu privire la informatiile despre un obiect Image, īn timp ce imaginea se construieste. |
Tabelul 7.2. Clasele si interfetele modelului de īmpingere
|