Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
&lac) negro
&lue azul
gra* gris
green verde
magenta violeta
orange naranja
pin) rosa
red rojo
$hite &lanco
*ello$ amarillo
-os constructores de esta clase son tres dos de los cuales permiten instanciar un nuevo
o&jeto de tipo Co8o( indicando las cantidades de rojo verde # azul !ue entran en su
composici%n mediante valores enteros en el rango = a 2>>3
8olor( intintint )
El otro de los constructores !ue permite especificar la contri&uci%n de rojo verde # azul
al color final admite valore flotantes en el rango ="= a ?"=3
8olor( floatfloatfloat )
H el tercer constructor admite solamente un n)mero entero en el cual se especifica el
valor .4E de forma !ue la cantidad de color rojo !ue interviene en el color final est
especificada en los &its ?@*2; del argumento la cantidad de verde en los &its C*?> # la
cantidad de azul en los &its =*B"
8olor( int )
/'todos !ue devuelven un entero representando el valor .4E para un determinado
o&jeto Co8o("
geted() devuelve el componente rojo del color como un entero en el rango = a 2>>"
getGreen() devuelve la cantidad de verde !ue entra en la composici%n del o&jeto 8olor
en el rango = a 2>>"
get#lue() devuelve el componente azul del color con un entero en el rango = a 2>>"
getG#() devuelve un entero representando el color .4E utilizando los &its para
indicar la cantidad de cada uno de los componentes rojo verde # azul !ue entran en su
composici%n" -os &its 2A a ;? del entero !ue devuelve el m'todo son =xff los &its ?@ a
2; son el valor rojo los &its C a ?> son el valor verde # los &its = a B indican el valor del
color azul" 5iempre en el rango = a 2>>"
-os siguiente m'todos devuelven un o&jeto de tipo Co8o( de forma !ue se pueden
utilizar para crear o&jetos de este tipo"
&righter() crea una versi%n ms &rillante del color"
dar)er() crea una versi%n ms oscura del color"
decode( (tring ) convierte una cadena a un entero # devuelve el color correspondiente"
-os m'todos !ue se indican a continuaci%n tam&i'n devuelven un o&jeto de tipo Co8o(
pero estn especializados para tra&ajar con el sistema a trav's de la clase P(o:)(0&)6"
get"olor( (tring ) &usca un color entre las propiedades del sistema" El o&jeto S0(&32 se
utiliza como el valor clave en el es!uema claveIvalor utilizado para descri&ir las
propiedades en Java" El valor es entonces utilizado para devolver un o&jeto Co8o("
get"olor( (tring!"olor ) &usca un color entre las propiedades del sistema" El segundo
parmetro es el !ue se devuelve en el caso de !ue falle la &)s!ueda de la clave indicada
en el o&jeto S0(&32"
get"olor( (tring!int ) &usca un color entre las propiedades del sistema" El segundo
parmetro es utilizado para instanciar # devolver un o&jeto Co8o( en el caso de !ue falle
la &)s!ueda de la clave indicada en el o&jeto S0(&32"
-os siguientes m'todos se utilizan para realizar la conversi%n entre el modelo de color
G# # el modelo '(#"
get'(#"olor( float!float!float ) crea un o&jeto de tipo Co8o( &asado en los valores
proporcionados por el modelo D5E"
'(#toG#( float!float!float ) convierte los componentes de un color tal como se
especifican en el modelo D5E a su conjunto e!uivalente de valores en el modelo .4E"
G#to'(#( int!int!int!float+, ) convierte los componentes de un color tal como se
especifican en el modelo .4E a los tres componentes del modelo D5E"
H #a los m'todos !ue !uedan son m'todos de utilidad general sin ninguna aplicaci%n
espec,fica en lo !ue al Co8o( respecta"
e-uals( %&ject ) determina si otro o&jeto es igual a un color"
hash"ode() calcula el c%digo hash para un color"
to(tring() crea una cadena representando al color indicando el valor de sus
componentes .4E"
E8 1?0odo d(+/I1+2)@A:
Este m'todo es el !ue se utiliza para presentar una imagen en pantalla< aun!ue (a#
m'todos de otras clases !ue son utilizados para la manipulaci%n de imgenes en Java lo
primero !ue se necesita es sa&er c%mo se visualiza una imagen # eso es lo !ue (ace este
m'todo dra$Image() de la clase G(+:>&56"
dra$Image( Image!int!int!"olor!Image%&server ) pinta la imagen !ue se indica
situando su es!uina superior iz!uierda en la coordenada !ue se pasa en el contexto
grfico actual" -os pixeles transparentes se pintan en el color de fondo !ue se indica"
Esta operaci%n es e!uivalente a rellenar un rectngulo del anc(o # alto de la imagen
dada con un color # luego pintar la imagen so&re 'l aun!ue pro&a&lemente ms
eficiente"
dra$Image( Image!int!int!Image%&server ) pinta la imagen !ue se indica situando su
es!uina superior iz!uierda en la coordenada !ue se pasa en el contexto grfico actual"
-os pixeles transparentes de la imagen no se ven afectados" Este m'todo retorna
inmediatamente en todos los casos incluso aun!ue la imagen completa no se (a#a
terminado de cargar # no se (a#a presentado completamente en el dispositivo de salida"
dra$Image( Image!int!int!int!int!"olor!Image%&server ) pinta la imagen !ue se pasa
dentro del rectngulo !ue se indica en los parmetros escalando esa imagen si es
necesario" El m'todo retorna inmediatamente aun!ue la imagen no se (a#a cargado
completamente" 5i la representaci%n de la imagen en el dispositivo de salida no se (a
completado entonces dra$Image() devuelve el valor false"
dra$Image( Image!int!int!int!int!Image%&server ) pinta la imagen !ue se pasa dentro
del rectngulo !ue se indica en los parmetros escalando esa imagen si es necesario" El
m'todo retorna inmediatamente aun!ue la imagen no se (a#a cargado completamente"
5i la representaci%n de la imagen en el dispositivo de salida no se (a completado
entonces dra$Image() devuelve el valor false" El proceso !ue pinta las imgenes
notifica al o&servador a trav's de su m'todo image.pdate()"
dra$Image( Image!int!int!int!int!int!int!int!int!"olor!Image%&server )"
dra$Image( Image!int!int!int!int!int!int!int!int!Image%&server )"
Ejemplo llamada a metodo3
pu&lic a&stract &oolean draJImage( Image img
int x
int #
int Jidt(
int (eig(t
ImageK&server o&server )
-os parmetros del m'todo son3
img la imagen !ue se !uiere pintar
x e # coordenadas para posicionar la es!uina superior iz!uierda de la imagen
Jidt( # (eig(t dimensiones del rectngulo so&re el !ue se posicionar la imagen
o&server o&jeto !ue (a de ser notificado tan pronto como la imagen se (a#a convertido
# situado en su posici%n
En esta versi%n del m'todo la imagen se pintar dentro del rectngulo !ue se para en
los parmetros # se escalar si es necesario" El m'todo retorna inmediatamente incluso
aun!ue la imagen no se (a#a terminado de escalar o convertir al formato !ue admita el
dispositivo de salida" 5i esta conversi%n no se (a completado dra$Image() devuelve
false # como (a# parte de imagen !ue no est procesada el proceso !ue pinta la imagen
notifica al o&servador a trav's de su m'todo image.pdate() # esa imagen contin)a
pintndose por trozos"
El m'todo image.pdate() pertenece a la clase Co1:o3)30 cuando es llamado encola
una llamada a repaint() permitiendo !ue se pinta un trozo ms de imagen sin !ue se
interfiera la tarea o (ilo de control principal" Da# tam&i'n una propiedad
+/0.&1+2).&35()1)30+8d(+/ !ue determina si la imagen puede ser pintada en piezas
tal como se (a indicado antes" El valor por defecto para esta propiedad es true en cu#o
caso el sistema va pintado trozos de imagen seg)n van llegando" 5i el valor es false el
sistema esperar a !ue la imagen est' completamente cargada antes de pintarla"
Da# una segunda propiedad +/0.&1+2).()d(+/(+0) !ue determina el per,odo m,nimo
en milisegundos !ue de&e (a&er entre llamadas a repaint() para imgenes" El valor por
defecto es ?== # solamente se aplica cuando la propiedad anterior es true" 2anto esta
propiedad como la anterior se pueden modificar pero solamente sirve esa modificaci%n
para la ejecuci%n actual del programa"
De los parmetros !ue se pasan al m'todo dra$Image() todos resultan o&vios excepto
!uiz el )ltimo de ellos o&server !ue se refiere al o&jeto !ue de&e ser notificado
cuando la imagen est' disponi&le" 8uando se realiza una llamada a dra$Image() se
lanza una tarea !ue carga la imagen solicitada" Da# un o&servador !ue monitoriza el
proceso de carga< la tarea !ue est cargando la imagen notifica a ese o&servador cada
vez !ue llegan nuevos datos" Para este parmetro se puede utilizar perfectamente t(is
como o&servador en la llamada a dra$Image()< es ms se puede decir !ue cual!uier
componente puede servir como o&servador para imgenes !ue se pintan so&re 'l" Luiz
sea este el momento de entrar un poco ms en detalle en la clase I1+2)O'6)(.)( e
incluso antes en la clase I1+2) por!ue son los dos parmetros diferentes del t,pico
entero !ue aparecen en la llamada a dra$Image()"
L+ 58+6) I1+2):
-a clase I1+2) como cual!uier otra est formada por una serie de constantes o
varia&les constructores # m'todos" 0no de estos m'todos es get5caledInstance() !ue
devuelve una versi%n escalada de una imagen" 0no de los parmetros de este m'todo es
un valor entero !ue especifica el algoritmo a utilizar para la realizaci%n del escalado" 5e
puede utilizar cual!uiera de ellos la ta&la siguiente muestra su nom&re # una pe!ue7a
descripci%n si el lector necesita ms detalles de&e recurrir como siempre se
recomienda a la documentaci%n del JDM"
58A-ENA.EANAFE.A4I64 utiliza el algoritmo Area Averaging
58A-EN$A52 utiliza un algoritmo !ue proporcione ma#or rapidez en el escalado a
costa de la suavidad de realizaci%n de ese escalado
58A-EN5/KK2D al contrario !ue el anterior sacrifica la velocidad por la suavidad
de realizaci%n del escalado
58A-EN.EP-I8A2E utiliza un algoritmo de los internos de la clase
.eplicate5cale$ilter
58A-ENDE$A0-2 utiliza el algoritmo de defecto
0ndefinedPropert# un o&jeto de este tipo de&e ser retornado siempre !ue una propiedad
no se encuentre definida para una determinada imagen" Esta propiedad no se utiliza para
el escalado sino !ue es utilizada como valor de retorno del m'todo getProperties() para
indicar !ue la propiedad solicitada no est disponi&le"
Aun!ue la clase I1+2) dispone de un constructor es una clase a&stracta por lo !ue no
se puede instanciar ning)n o&jeto llamando directamente a este constructor" 5e puede
conseguir un o&jeto I1+2) indirectamente por la invocaci%n del m'todo getImage() de
las clases A::8)0 o Too8;&0" El m'todo getImage() utiliza un (ilo de ejecuci%n o tarea
separado para cargar la imagen" El resultado prctico de la invocaci%n a getImage() es
la asociaci%n entre una referencia de tipo I1+2) # un fic(ero localizado en alg)n lugar
!ue contiene la imagen !ue interesa" Ktra forma de o&tener un o&jeto I1+2) es invocar
al m'todo createImage() de las clases Co1:o3)30 # Too8;&0" -a lista siguiente
muestra una pe!ue7a descripci%n de los m'todos de la clase I1+2)3
flush() li&era todos los recursos !ue utiliza el o&jeto Image
getGraphics() crea un contexto grfico para pintar una imagen en segundo plano
get'eight( Image%&server ) determina la altura de la imagen
get/idth( Image%&server ) determina la anc(ura de la imagen
getPropert*( (tring!Image%&server ) o&tiene una propiedad de la imagen por su
nom&re
get(caledInstance( int!int!int ) crea una versi%n escalada de la imagen
get(ource() devuelve el o&jeto !ue produce los pixeles de la imagen
Algunos de estos m'todos se utilizarn en los ejemplos !ue se presentan" 6o o&stante el
inter's no de&e centrarse solamente en la clase I1+2) sino tam&i'n en las otras clases
!ue se necesitan para instanciar los parmetros de llamada a estos m'todos e incluso
algunas otras clases de soporte general" Por ello a)n a costa de resultar un poco ladrillo
se presenta a continuaci%n una pe!ue7a revisi%n de las clases ms interesantes
#)d&+T(+5;)( e I1+2)P(od75)( #a !ue so&re las clases S0(&32 I1+2)O'6)(.)(
G(+:>&56 # O'-)50 !ue son las !ue intervienen en los m'todos de la clase Image
E8 &30)(4+B I1+2)P(od75)(:
5e trata de un interfaz para o&jeto !ue pueden producir imgenes para la clase I1+2)"
8ada imagen contiene un I1+2)P(od75)( !ue se utiliza en la reconstrucci%n de esa
imagen cuando es necesario< por ejemplo cuando se escala la imagen o cuando se
cam&ia la imagen de tama7o
L+ 58+6) #)d&+T(+5;)(:
Esta es una clase de utilidad general dise7ada para controlar el estado de los o&jetos de
tipo media !ue en teor,a pueden ser tanto clips de sonido como cual!uier otro o&jeto
media como es el caso de una imagen"
0n o&jeto #)d&+T(+5;)( se utiliza a trav's de una instancia de la clase #)d&+T(+5;)(
so&re el o&jeto Co1:o3)30 !ue se !uiere monitorizar e invocando al m'todo
addImage() para cada una de las imgenes !ue se !uiere controlar" A cada una de estas
imgenes se puede asignar un identificador )nico o tam&i'n se puede asignar el mismo
identificador a un grupo de imgenes" Este identificador controla el orden de prioridad
en !ue se cargarn las imgenes de forma !ue imgenes con un identificador &ajo
tienen preferencia so&re otras con identificador ms alto" El identificador tam&i'n se
puede utilizar para identificar un conjunto )nico de imgenes" En otras pala&ras
asignando el mismo identificador a varias imgenes se las puede manejar a la vez"
5e puede determinar el estado de una imagen (o grupo de imgenes) invocando alguno
de los distintos m'todos so&re el o&jeto #)d&+T(+5;)( pasndole como parmetro el
identificador de la imagen (o grupo de imgenes)"
El o&jeto #)d&+T(+5;)( tam&i'n se puede utilizar para &lo!uear la ejecuci%n a la
espera de la carga completa de una imagen (o grupo de imgenes"
-a clase #)d&+T(+5;)( proporciona cuatro constantes !ue se utilizan como valores de
retorno de algunos de los m'todos de la clase # tal como su nom&re sugiere indican el
estado en !ue se encuentra una imagen dada" Estas constantes son las siguientes"
AEK.2ED la carga de la imagen (o cual!uier media) (a sido a&ortada
8K/P-E2E realizara satisfactoriamente la carga completa
E..K.ED se (a encontrado alg)n tipo de error en la carga
-KADI64 se est cargando la imagen (o cual!uier media)
Para esta clase solamente (a# un constructor !ue pueda ser invocado a la (ora de
instanciar o&jetos !ue controlen el estado de algunas o todas las imgenes so&re un
determinado componente"
#)d&+T(+5;)(@ Co1:o3)30 A:
0n o&jeto #)d&+T(+5;)( tiene la posi&ilidad de controlar el estado de algunas o todas
las imgenes !ue estn siendo cargadas para el o&jeto Co1:o3)30 !ue se (a pasado
como parmetro a la (ora de instanciar ese o&jeto #)d&+T(+5;)(" -os m'todos
siguientes se utilizan para crear # mantener esta lista de imgenes" 8uando se a7ade una
imagen a la lista (a# !ue proporcionar un identificador num'rico para esa imagen !ue
ser luego el !ue sea utilizado por otros m'todos para poder indicar el estado en !ue se
encuentra una imagen determinada"
addImage( Image!int ) incorpora una nueva imagen a la lista de imgenes !ue est
siendo controlada por el o&jeto #)d&+T(+5;)("
addImage( Image!int!int!int ) incorpora una imagen escalada a la lista"
removeImage( Image ) elimina la imagen indicada de la lista"
removeImage( Image!int ) elimina la imagen !ue corresponde al identificador !ue se
pasa como parmetro de la lista"
removeImage( Image!int!int!int ) elimina la imagen !ue corresponde al anc(o alto e
identificador de la lista de imgenes"
El o&jeto #)d&+T(+5;)( se puede utilizar para (acer !ue la tarea o (ilo de ejecuci%n
se &lo!uee (asta !ue una o ms imgenes de su lista (a#a completado su carga" Esto se
consigue con los siguientes m'todos"
$aitFor0ll() inicia la carga de todas la imgenes controladas por el o&jeto
#)d&+T(+5;)(< devuelve void"
$aitFor0ll( long ) inicia la carga de todas la imgenes devolviendo true si todas las
imgenes se (an cargado # false en cual!uier otro caso"
$aitForI1( int ) inicia la carga de las imgenes !ue corresponden al identificador !ue
se pasa< devuelve void"
$aitForI1( int!long ) inicia la carga de las imgenes !ue corresponden al identificador
!ue se pasa< devuelve true si todas las imgenes se (an cargado # false en cual!uier otro
caso"
Por supuesto es posi&le utilizar m'todos !ue no &lo!uean la tarea !ue carga las
imgenes para compro&ar el estado de una o ms imgenes de la lista" Esto permite
continuar (aciendo el tra&ajo mientras las imgenes siguen cargndose" Estos m'todos
devuelven true o false para indicar si la carga es completa" -a versi%n con el parmetro
&ooleano comenzar la carga de cual!uier imagen !ue no se est' cargando en caso de
!ue ese parmetro &ooleano sea true" -a otra versi%n no iniciar la carga de ninguna
imagen" Esta interpretaci%n tam&i'n es vlida para el parmetro &ooleano de otros
m'todos de la clase !ue disponen de 'l"
chec)0ll() # chec)0ll( &oolean ) comprue&an si todas las imgenes !ue estn siendo
controladas por el o&jeto #)d&+T(+5;)( (an finalizado la carga"
chec)I1( int ) # chec)I1( int!&oolean ) comprue&an si todas las imgenes !ue
corresponden al identificador especificado (an concluido su carga"
El (ec(o de !ue los m'todos anteriores indi!uen !ue la carga de las imgenes (a sido
completa no garantiza !ue esa carga est' li&re de errores" -os siguiente m'todos se
utilizan para determinar si se (a producido alg)n pro&lema durante la carga de las
imgenes"
get2rrors0n*() devuelve una lista de todas las imgenes (o cual!uier media) en los !ue
se (a producido un error en la carga"
get2rrors0n*( int ) devuelve una lista de todas las imgenes correspondientes a un
determinado identificador en los !ue se (a producido un error en la carga"
is2rror0n*() comprue&a el estado de error de todas las imgenes"
is2rrorI1( int ) comprue&a el estado de error de todas las imgenes correspondientes a
un determinado identificador"
-os dos siguientes m'todos devuelven un valor entero formado por la operaci%n K.
entre los valores de estado de todas las imgenes !ue se re!uieren< en el primero de
todas las !ue controla el o&jeto #)d&+T(+5;)( # en el segundo de las !ue
corresponden al identificador !ue se especifica"
status0ll( &oolean )
statusI1( int!&oolean )
GRAFICOS CON JAVA ,D
I1C2)3)6
El API 2D de Java implementa un nuevo modelo de imagen !ue soporta la
manipulaci%n de imgenes de resoluci%n fija almacenadas en memoria" 0na nueva clase
Image en el pa!uete java"aJt"image se puede usar EufferedImage para manipular datos
de una imagen recuperados desde un fic(ero o una 0.-" Por ejemplo se puede usar un
EufferedImage para implementar do&le &uffer ** los elementos grficos son di&ujados
fuera de la pantalla en el EufferedImage # luego son copiados a la pantalla a trav's de
llamadas al m'todo draJImage de 4rap(ics2D" -as clases EufferedImage #
EufferedImageKp tam&i'n permiten realizar una gran variedad de operaciones de
filtrado de imgenes como &lur" El modelo de imagen productorIconsumidor
proporcionado en las versiones anteriores del JDM sigue siendo soportado por razones
de compati&ilidad
S&60)1+ d) Coo(d)3+d+6
El sistema 2D de Java mantiene dos espacios de coordenadas3
6)0S0(o;)
6)0P+&30
6)0Co1:o6&0)
6)0T(+364o(1
6)0C8&:
6)0Fo30
6)0R)3d)(&32=&306
8uando se configura un atri&uto se le pasa al o&jeto el atri&uto apropiado" Por ejemplo
para cam&iar el atri&uto paint a un relleno de gradiente azul*gris se de&er,a construir el
o&jeto G(+d&)30P+&30 # luego llamar a 6)0P+&30"
gp R neJ 4radientPaint(=f=f&lue=f;=fgreen)<
g2"setPaint(gp)<
G(+:>&56,D contiene referencias a sus o&jetos atri&utos ** no son clonados" 5i
modificamos un o&jeto atri&uto !ue forma parte del contexto G(+:>&56,D necesitamos
llamar al m'todo 6)0 para notificarlo al contexto" -a modificaci%n de un atri&uto de un
o&jeto durante el renderizado puede causar comportamientos impredeci&les"
#?0odo6 d) ()3d)(&B+do d) G(+:>&56,D
G(+:>&56,D proporciona los siguientes m'todos generales de di&ujado !ue pueden
usarser para di&ujar cual!uier primitivo geom'trico texto o imagen"
2ranformaci%n afin"
Escalado"
/odificaci%n de Aspecto"
8onversi%n de color"
8onvoluci%n"
Para filtrar un EufferedImage usando una de las clases de operaci%n de imagen se
de&e3
?" 8onstuir un ejemplar de una de las clases EufferedImageKp3
Affine2ransformKp Eand8om&ineKp 8olor8onvertKp 8onvolveKp
-ooGupKp o .escaleKp"
2" -lamar al m'todo de operaci%n filter pasando en el EufferedImage !ue
!ueremos filtrar # el EufferedImage donde !ueremos almacenar el resultado"
Ejemplo3 ImageKps
El siguiente applet ilustra el uso de cuatro operaciones de filtrado de imagenes3 loJ*
pass s(arpen looGup # rescale"
El filtro s(arpen se realiza usando un 8onvolveKp" 8onvoluci%n es el proceso de (acer
ms pesado el valor de cada pixel en una imagen con los valores de los pixels vecinos"
-a ma#or,a de los algoritmos de filtrado espacial estn &asados en las operaciones de
convoluci%n"
Para construir # aplicar este tipo de filtrado al EufferedImage este ejemplo usa un
c%digo similar al del siguiente fragmento"
pu&lic static final float9: 5DA.PE6;x; R Q
="f *?"f ="f
*?"f >"=f *?"f
="f *?"f ="fS<
EufferedImage dst&img R neJ
EufferedImage(iJi(EufferedImage"2HPENI62N.4E)<
Mernel Gernel R neJ Mernel(;;5DA.PE6;x;)<
8onvolveKp cop R neJ 8onvolveKp(Gernel
8onvolveKp"ED4EN6KNKP
null)<
cop"filter(src&imgdst&img)<
El o&jeto Mernel define matemticamente c%mo se ve afectada la salida de cada pixels
en su rea inmediata" -a definici%n del Mernel determina el resultado del filtro"
So:o(0+( I30)(+55&E3 5o3 )8 U67+(&o:
Para permitir !ue el usuario interact)e con los graficos !ue se di&ujan se re!uiere
poder determinar cuando el usuario pulsa so&re uno de ellos" El m'todo (it de
4rap(ics2D proporciona una forma para determinar fcilmente si (a ocurrido una
pulsaci%n de rat%n so&re una 5(ape particular" De forma alternativa podemos o&tener la
posici%n del clicG de rat%n # llamar a contains so&re la 5(ape para determinar si el clicG
ocurri% dentro de los l,mites de la 5(ape"
5i estamos usando texto primitvo podemos realizar una simple compro&aci%n
o&teniendo la l,nea exterior de la 5(ape !ue corresponde al texto # luego llamando a (it
o contains con esa 5(ape" El soporte de edici%n de texto re!uiere una compro&aci%n
muc(o ms sofisticada" 5i !ueremos permitir !ue el usuario edite el texto generalmente
de&er,amos usar uno de los componentes de texto edita&le de 5Jing" 5i estamos
tra&ajando con texto primitivo # estamos usando 2ext-a#out para manejar la forma #
posici%n del texto tam&i'n podemos usar 2ext-a#out para realizar la compro&aci%n
para la edici%n de texto"
Ejemplo3 5(ape/over
Este applet permite al usuario arrastrar la 5(ape por la ventana del applet" -a 5(ape se
redi&uja en cada nueva posici%n del rat%n para proporcionar informaci%n al usuario
mientras la arrastra"
5e llama al m'todo contains para determinar si el cursor est dentro de los l,mites del
rectngulo cuando se pulsa el &ot%n" 5i es as, se actualiza la posici%n del rectngulo"
pu&lic void mousePressed(/ouseEvent e)Q
lastNx R rect"x * e"getO()<
lastN# R rect"# * e"getH()<
if(rect"contains(e"getO() e"getH())) update-ocation(e)<
"""
pu&lic void update-ocation(/ouseEvent e)Q
rect"set-ocation(lastNx T e"getO() lastN# T e"getH())<
"""
repaint()<
Al redi&ujar la 5(ape en cada posici%n del rat%n es mu# lento por!ue el rectngulo
relleno es renderizado cada vez !ue se mueve 0sando el do&le &uffer podemos eliminar
este pro&lema" 5i estamos usando 5Jing el di&ujo usar do&le &uffer automticamente<
si no es as, tendremos !ue cam&iar todo el c%digo de renderizado"
5i no estamos usando 5Jing el Ejemplo3 Euffered5(ape/over en la siguiente lecci%n
nos muestra c%mo podemos implementar el do&le &uffer usando un EufferedImage"
Podemos di&ujar en un EufferedImage # luego copiar la imagen en la pantalla"
Ejemplo3 Dit2est5ample
Esta aplicaci%n ilustra la compro&aci%n de pulsaciones di&ujando el cursor por defecto
siempre !ue el usuario pulse so&re el 2ext-a#out como se muestra en la siguiente
figura"
Esta es una imagen del 40I del applet" Para ajecutar el applet pulsa so&re ella" El
applet aparecer en una nueva ventana del navegador"
Dit2est5ample"java contiene el c%digo completo de este applet"
El m'todo mouse8licGed usa 2ext-a#out"(it2est8(ar para devolver un o&jeto
java"aJt"font"2extDitInfo !ue contiene la posici%n del clicG (el ,ndice de inserci%n) en
el o&jeto 2ext-a#out"
-a informaci%n devuelta por los m'todos de 2ext-a#out getAscent getDescent #
getAdvance se utiliza para calcular la posici%n del origen del o&jeto 2ext-a#out para
!ue est' centrado tanto (orizontal como verticalmente"
"""
private Point2D compute-a#outKrigin() Q
Dimension size R getPreferred5ize()<
Point2D"$loat origin R neJ Point2D"$loat()<
origin"x R (float) (size"Jidt( * text-a#out"getAdvance()) I 2<
origin"# R
(float) (size"(eig(t * text-a#out"getDescent()
T text-a#out"getAscent())I2<
return origin<
S
"""
pu&lic void paint8omponent(4rap(ics g) Q
super"paint8omponent(g)<
setEacGground(8olor"J(ite)<
4rap(ics2D grap(ics2D R (4rap(ics2D) g<
Point2D origin R compute-a#outKrigin()<
grap(ics2D"translate(origin"getO() origin"getH())<
II DraJ text-a#out"
text-a#out"draJ(grap(ics2D = =)<
II .etrieve caret 5(apes for insertionIndex"
5(ape9: carets R text-a#out"get8aret5(apes(insertionIndex)<
II DraJ t(e carets" carets9=: is t(e strong caret and
II carets9?: is t(e JeaG caret"
grap(ics2D"set8olor(52.K64N8A.E2N8K-K.)<
grap(ics2D"draJ(carets9=:)<
if (carets9?: UR null) Q
grap(ics2D"set8olor(1EAMN8A.E2N8K-K.)<
grap(ics2D"draJ(carets9?:)<
S
S
"""
private class Dit2est/ouse-istener extends /ouseAdapter Q
IVV
V 8ompute t(e c(aracter position of t(e mouse clicG"
VI
pu&lic void mouse8licGed(/ouseEvent e) Q
Point2D origin R compute-a#outKrigin()<
II 8ompute t(e mouse clicG location relative to
II text-a#outPs origin"
float clicGO R (float) (e"getO() * origin"getO())<
float clicGH R (float) (e"getH() * origin"getH())<
II 4et t(e c(aracter position of t(e mouse clicG"
2extDitInfo currentDit R text-a#out"(it2est8(ar(clicGO clicGH)<
insertionIndex R currentDit"getInsertionIndex()<
II .epaint t(e 8omponent so t(e neJ caret(s) Jill &e displa#ed"
(itPane"repaint()<
S
R)5o(0+( 8+ R)2&E3 d) D&'7-o
8ual!uier 5(ape puede usarse como un pat( de recortado !ue restringe las porciones del
rea de di&ujo !ue sern renderizadas" El pat( de recortado forma parte del contexto
4rap(ics2D< para seleccionar el atri&uto clip se llama a 4rap(ics2D"set8lip # se pasa a
la 5(ape !ue define el pat( de recortado !ue !ueramos usar" Podemos reducir el pat( de
recortado llamando al m'todo clip # pasndolo en otra 5(ape< el atri&uto clip se
configura a la intersecci%n entre el clip actual # el 5(ape especificado"
Ejemplo3 8lipImage
Este ejemplo anima un pat( de recortado para revelar diferentes porciones de una
imagen3
"
El pat( de recortado est definido por la intersecci%n de una elipse # un rectngulo
cu#as dimensiones son aleatorias" -a elipse se pasa al m'todo set8lip # luego se llama
al m'todo clip para seleccionar el pat( de recortado a la intersecci%n entre la elipse # el
rectngulo"
private Ellipse2D ellipse R neJ Ellipse2D"$loat()<
private .ectangle2D rect R neJ .ectangle2D"$loat()<
"""
ellipse"set$rame(x # eJ e()<
g2"set8lip(ellipse)<
rect"set.ect(xT> #T> eJ*?= e(*?=)<
g2"clip(rect)<
Ejemplo3 5tarr#
0n rea de recortado tam&i'n puede crearse desde una cadena de texto existente" El
siguiente ejemplo crea un 2ext-a#out con la cadena 2(e 5tarr# 6ig(t" -uego o&tiene
una l,nea exterior del 2ext-a#out" El m'todo 2ext-a#out"getKutline devuelve un o&jeto
5(ape # un .ectangle creado a partir de los l,mites del o&jeto 5(ape" -os l,mites
contienen todos los pixels !ue la#out puede di&ujar" El color en el contexto grfico se
selecciona a azul # se di&uja la figura exterior de la forma como ilustran la siguiente
imagen # el fragmento de c%digo"
$ont.ender8ontext frc R g2"get$ont.ender8ontext()<
$ont f R neJ $ont(+Delvetica+ ? JI?=)<
5tring s R neJ 5tring(+2(e 5tarr# 6ig(t+)<
2ext-a#out tl R neJ 2ext-a#out(s f frc)<
Affine2ransform transform R neJ Affine2ransform()<
5(ape outline R text2l"getKutline(null)<
.ectangle r R outline"getEounds()<
transform R g2"get2ransform()<
transform"translate(JI2*(r"Jidt(I2) (I2T(r"(eig(tI2))<
g2"transform(transform)<
g2"set8olor(8olor"&lue)<
g2"draJ(outline)<
-uego se selecciona un rea de recortado en el contexto grfico usando el o&jeto 5(ape
creado a partir de getKutline" -a imagen starr#"gif !ue es una pintura famosa de Fan
4og( 2(e 5tarr# 6ig(t se di&uja dentro de rea de recortado !ue empieza en la
es!uina inferior iz!uierda del o&jeto .ectangle"
g2"set8lip(outline)<
g2"draJImage(img r"x r"# r"Jidt( r"(eig(t t(is)<
P730)+do < R)88)3o d) G(C4&5o6 P(&1&0&.o6
8am&iando el punteado # los atri&utos de di&ujo en el contexto de 4rap(ics2D antes
del di&ujo podemos fcilmente aplicar estilos divertidos de l,neas # patrones de relleno
para grficos primitivos" Por ejemplo podemos di&ujar una l,nea punteada creando el
o&jeto 5troGe apropiado # llamando a set5troGe para a7adirlo al contexto 4rap(ics2D
antes de di&ujar la l,nea" De forma similar podemos aplicar un relleno de gradiente a un
5(ape creando un o&jeto 4radientPaint # a7adiendo al contexto 4rap(ics2D llamando a
setPaint antes de di&ujar la 5(ape"
El siguiente applet demuestra c%mo podemos di&ujar formas geom'tricas usando los
m'todos 4rap(ics2D draJ # fill"
Esta es una imagen del 40I del applet" Para ajecutar el applet pulsa so&re ella" El
applet aparecer en una nueva ventana del navegador"
5(apesDemo2D"java contiene el c%digo completo de este applet"
8ada una de las formas di&ujadas por el applet est construida de geometr,as # est
di&ujada a trav's de 4rap(ics2D" -as varia&les rectDeig(t # rect1idt( de este ejemplo
definen las dimensiones del espacio en !ue se di&uja cada forma en pixels" -a varia&les
x e # cam&ian para cada forma para !ue sean di&ujadas en formaci%n de parrilla"
II draJ -ine2D"Dou&le
g2"draJ(neJ -ine2D"Dou&le(x #TrectDeig(t*?
x T rect1idt( #))<
II draJ .ectangle2D"Dou&le
g2"set5troGe(stroGe)<
g2"draJ(neJ .ectangle2D"Dou&le(x #
rect1idt(
rectDeig(t))<
II draJ .ound.ectangle2D"Dou&le
g2"set5troGe(das(ed)<
g2"draJ(neJ .ound.ectangle2D"Dou&le(x #
rect1idt(
rectDeig(t
?= ?=))<
II draJ Arc2D"Dou&le
g2"set5troGe(Jide5troGe)<
g2"draJ(neJ Arc2D"Dou&le(x #
rect1idt(
rectDeig(t
W= ?;>
Arc2D"KPE6))<
II draJ Ellipse2D"Dou&le
g2"set5troGe(stroGe)<
g2"draJ(neJ Ellipse2D"Dou&le(x #
rect1idt(
rectDeig(t))<
II draJ 4eneralPat( (pol#gon)
int x?Points9: R Qx xTrect1idt(
x xTrect1idt(S<
int #?Points9: R Q# #TrectDeig(t
#TrectDeig(t #S<
4eneralPat( pol#gon R neJ
4eneralPat((4eneralPat("1I6DNEFE6NKDD
x?Points"lengt()<
pol#gon"move2o(x?Points9=: #?Points9=:)<
for (int index R ?<
index X x?Points"lengt(<
indexTT) Q
pol#gon"line2o(x?Points9index:
#?Points9index:)<
S<
pol#gon"closePat(()<
g2"draJ(pol#gon)<
II draJ 4eneralPat( (pol#line)
int x2Points9: R Qx xTrect1idt( x
xTrect1idt(S<
int #2Points9: R Q# #TrectDeig(t
#TrectDeig(t #S<
4eneralPat( pol#line R neJ
4eneralPat((4eneralPat("1I6DNEFE6NKDD
x2Points"lengt()<
pol#line"move2o (x2Points9=: #2Points9=:)<
for (int index R ?<
index X x2Points"lengt(<
indexTT) Q
pol#line"line2o(x2Points9index:
#2Points9index:)<
S<
g2"draJ(pol#line)<
II fill .ectangle2D"Dou&le (red)
g2"setPaint(red)<
g2"fill(neJ .ectangle2D"Dou&le(x #
rect1idt( rectDeig(t))<
II fill .ound.ectangle2D"Dou&le
g2"setPaint(redtoJ(ite)<
g2"fill(neJ .ound.ectangle2D"Dou&le(x #
rect1idt(
rectDeig(t
?= ?=))<
II fill Arc2D
g2"setPaint(red)<
g2"fill(neJ Arc2D"Dou&le(x # rect1idt(
rectDeig(t W=
?;> Arc2D"KPE6))<
II fill Ellipse2D"Dou&le
g2"setPaint(redtoJ(ite)<
g2"fill (neJ Ellipse2D"Dou&le(x #
rect1idt(
rectDeig(t))<
II fill and stroGe 4eneralPat(
int x;Points9: R Qx xTrect1idt( x
xTrect1idt(S<
int #;Points9: R Q# #TrectDeig(t
#TrectDeig(t #S<
4eneralPat( filledPol#gon R neJ
4eneralPat((4eneralPat("1I6DNEFE6NKDD
x;Points"lengt()<
filledPol#gon"move2o(x;Points9=:
#;Points9=:)<
for (int index R ?<
index X x;Points"lengt(<
indexTT) Q
filledPol#gon"line2o(x;Points9index:
#;Points9index:)<
S<
filledPol#gon"closePat(()<
g2"setPaint(red)<
g2"fill(filledPol#gon)<
K&serva !ue este ejemplo usa implementaciones de do&le precision de las clases
geom'tricas" Donde sea posi&le las implementaciones de los float # do&le precisi%n de
cada geom'trico estn proporcionados por clases internas"
Di&ujar 8urvas
-os applets 8u&ic # Luad demuestran como crear curvas c)&icas # cuadrticas usando
8u&ic8urve2D # Luad8urve2D" Estos applets tam&i'n demuestran como se di&ujan las
curvas con respecto al posicionamiento de los puntos de control permitiendonos mover
interactivamente tanto los puntos de control como los puntos finales"
Ejemplo3 Luad
El applet Luad demuestra una curva cuadrtica !ue es un segmento de curva !ue tiene
dos puntos finales # un )nico punto de control" El punto de control determina la forma
de la curva controlando tanto el punto de control como los vectores tangenciales de los
puntos finales"
Esta es una imagen del 40I del applet" Para ajecutar el applet pulsa so&re ella" El
applet aparecer en una nueva ventana del navegador"
Luad"java contiene el c%digo completo de este applet"
Primero se crea una nueva curva cuadrtica con dos puntos finales # un punto de control
# las posiciones de los puntos se seleccionan con respecto al tama7o de la ventana"
Luad8urve2D"Dou&le !uad R neJ Luad8urve2D"Dou&le()<
Point2D"Dou&le start end control<
start R neJ Point2D"Dou&le()<
one R neJ Point2D"Dou&le()<
control R neJ Point2D"Dou&le()<
!uad"set8urve(start one control)<
start"set-ocation(JI2*>= (I2)<
end"set-ocation(JI2T>= (I2)<
control"set-ocation((int)(start"x)T>= (int)(start"#)*>=)<
8ada vez !ue el usuario mueva uno de los puntos la curva se resetear"
!uad"set8urve(start control end)<
Ejemplo3 8u&ic
El ejemplo 8u&ic muestra una curva c)&ica !ue es un segmento de curva !ue tiene dos
puntos finales # dos puntos de control" 8ada punto de control determina la forma de la
curva mediante el control de uno de los vectores tangenciales de un punto final" En el
ejemplo 8u&ic las cruces coloreadas se di&ujan donde se encuentran los puntos de
control # los puntos finales" El punto de control azul controla el punto final rojo # el
punto de control verde controla el punto final magenta"
Esta es una imagen del 40I del applet" Para ajecutar el applet pulsa so&re ella" El
applet aparecer en una nueva ventana del navegador"
8u&ic"java contiene el c%digo completo de este applet"
0na curva c)&ica se crea con dos puntos finales # dos puntos de control # las
localizaciones de los puntos se seleccionan con respecto al tama7o de la ventana"
8u&ic8urve2D"Dou&le cu&ic R neJ 8u&ic8urve2D"Dou&le()<
Point2D"Dou&le start end one tJo<
start R neJ Point2D"Dou&le()<
one R neJ Point2D"Dou&le()<
tJo R neJ Point2D"Dou&le()<
end R neJ Point2D"Dou&le()<
cu&ic"set8urve(start one tJo end)<
"""
start"set-ocation(JI2*>= (I2)<
end"set-ocation(JI2T>= (I2)<
one"set-ocation((int)(start"x)T2> (int)(start"#)*2>)<
tJo"set-ocation((int)(end"x)*2> (int)(end"#)T2>)<
8omo en el ejemplo Luad la curva es reseteada cada vez !ue se mueven los puntos"
cu&ic"set8urve(start one tJo end)<
Di&ujar formas ar&itrarias
El ejemplo 5(apesDemo usa 4eneralPat( para (acer pol,gonos en forma de cristales
pero tam&ien podemos usar 4eneralPat( para (acer formas ar&itrarias tanto con l,neas
rectas como curvas"
Ejemplo3 KddN5(ape
El ejemplo KddN5(ape usa 4eneralPat( para crear formas ar&itrarias en la secci%n
$ormas"
Esta es una imagen del 40I del applet" Para ajecutar el applet pulsa so&re ella" El
applet aparecer en una nueva ventana del navegador"
KddN5(ape"java contiene el c%digo completo de este applet"
El siguiente c%digo crea un nuevo 4eneralPat( # a7ade el primer punto al pat("
4eneralPat( odd5(ape R neJ 4eneralPat(()<
"""
x R JI2 T >=<
# R (I2 * 2><
x2 R x<
#2 R #<
odd5(ape"move2o(x #)<
Despu's de a7adir el primer punto al pat( se a7aden tres l,neas rectas"
x *R ?==<
odd5(ape"line2o(x #)<
# TR >=<
odd5(ape"line2o(x #)<
x TR ?==<
odd5(ape"line2o(x #)<
$inalmente se a7ade una curva c)&ica"
x TR ?=<
# *R ?=<
x? R x * 2=<
#? R # * 2=<
odd5(ape"curve2o(x # x? #? x2 #2)<
Definir Estilos de l,nea divertidos # Patrones de relleno"
Pro&a&lemente (a&rs o&servado en el ejemplo anterior algunas de las formas tienen
l,neas punteadas o estn rellenas con gradientes de dos colores" 0sando las clases 5troGe
# Paint de Java 2D podemos fcilmente definir estilos de l,nea divertidos # patrones de
relleno"
Estilos de -,nea
-os estilos de l,nea estn definidos por el atri&uto stroGe en el contexto 4rap(ics2D"
Para seleccionar el atri&uto stroGe podemos crear un o&jeto Easic5troGe # pasarlo
dentro del m'todo 4rap(ics2D set5troGe"
0n o&jeto Easic5troGe contiene informaci%n so&re la anc(ura de la l,nea estilo de
uniones estilos finales # estilo de punteado" Esta informaci%n se usa cuando se di&uja
un 5(ape con el m'todo draJ"
-a anc(ura de l,nea es la longitud de la l,nea medida perpendicularmente a su
tra#ectoria" -a anc(ura de la l,nea se especificada como un valor float en las unidades
de coordenadas de usuario !ue es e!uivalente a ?IB2 pulgadas cuando se utiliza la
transformaci%n por defecto"
El estilo de uni%n es la decoraci%n !ue se aplica cuando se encuentran dos segmentos de
l,nea" Easic5troGe soporta tres estilos de uni%n3"
JKI6NEEFE-
JKI6N/I2E.
JKI6N.K06D
El estilo de finales es la decoraci%n !ue se aplica cuando un segmento de l,nea termina"
Easic5troGe soporta tres estilos de finalizaci%n3
8APNE022
8APN.K06D
8APN5L0A.E
El estilo de punteado define el patr%n de las secciones opacas # transparentes aplicadas
a lo largo de la longitud de la l,nea" Este estilo est definido por un arra# de punteado #
una fase de punteado" El arra# de punteado define el patr%n de punteado" -os elementos
alternativos en el arra# representan la longitud del punteado # el espacio entre
punteados en unidades de coordenadas de usuario"" El elemento = representa el primer
punteado el elemento ? el primer espacio etc" -a fase de punteado es un
desplazamiento en el patr%n de punteado tam&i'n especificado en unidades de
coordenadas de usuario" -a fase de punteado indica !ue parte del patr%n de punteado se
aplica al principio de la l,nea"
Patr%n de .elleno
-os patrones de rellenos estn definidos por el atri&uto paint en el contexto 4rap(ics2D"
Para seleccionar el atri&uto paint se crea un ejemplar de un o&jeto !ue implemente el
interface Paint # se pasa dentro del m'todo 4rap(ics2D setPaint"
2res clases implementan el interface Paint3 8olor 4radientPaint # 2exturePaint "
4radientPaint # 2exturePaint son nuevas en el JDM ?"2"
Para crear un 4radientPaint se especifica una posici%n inicial # un color # una posici%n
final # otro color" El gradiente cam&ia proporcionalmente desde un color al otro a lo
largo de la l,nea !ue conecta las dos posiciones"
El patr%n para una 2exturePaint esta definido por un EufferedImage" Para crear un
2exturePaint se especifica una imagen !ue contiene el patr%n # un rectngulo !ue se
usa para replicar # anclar el patr%n"
Ejemplo3 5troGeAnd$ill
El applet 5troGeAnd$ill permite al usuario seleccionar un grfico primitivo un estilo de
l,nea un estilo de di&ujo # o &ien puntear el exterior del o&jeto rellenarlo con el di&ujo
seleccionado o puntear el o&jeto en &lanco # rellenar el di&ujo con el di&ujo
seleccionado"
Esta es una imagen del 40I del applet" Para ajecutar el applet pulsa so&re ella" El
applet aparecer en una nueva ventana del navegador"
5troGeAnd$ill"java contiene el c%digo completo de este applet"
-os primitivos son inicializados e introducidos en un arra# de o&jetos 5(ape" El
siguiente c%digo crea un .ectangle # un Ellipse2D"Dou&le # los introduce en el arra#
s(apes"
s(apes9=: R neJ .ectangle(= = ?== ?==)<
s(apes9?: R neJ Ellipse2D"Dou&le(="= ="= ?=="= ?=="=)<
Para crear un o&jeto 5(ape desde una cadena de texto primero de&emos crear un o&jeto
2ext-a#out desde el texto de la cadena"
2ext-a#out text2l R neJ 2ext-a#out(+2ext+
neJ $ont(+Delvetica+ ? W@)
neJ $ont.ender8ontext(null false false))<
-as siguientes l,neas transforman el 2ext-a#out para !ue sea centrado en el origen #
luego introduce el o&jeto 5(ape resultante de la llamda a getKutline dentro del arra#
s(apes"
Affine2ransform textAt R neJ Affine2ransform()<
textAt"translate(=
(float)text2l"getEounds()"getDeig(t())<
s(apes92: R text2l"getKutline(textAt)<
Podemos elegir un primitivo accediendo al ,ndice apropiado dentro del arra# s(apes"
5(ape s(ape R
s(apes92ransform"primitive"get5electedIndex():<
8%mo se realiza el di&ujo dependen de las opciones elegidas"
8uando el usuario elige stroGe and fill se llama a fill o draJ5tring para rellenar
el 5(ape # luego se llama a draJ para di&ujar la l,nea exterior"
6ota3
Para rellenar # puntear un grfico primitivo necesitamos (acer dos llamadas separadas a
m'todos3 fill o draJ5tring para rellenar el interior # draJ para di&ujar el exterior"
-os tres estilos de l,nea usados en este ejemplo ** anc(o estrec(o # punteado ** son
ejemplares de Easic5troGe"
II 5ets t(e 5troGe"
"""
case = 3 g2"set5troGe(neJ Easic5troGe(;"=f))< &reaG<
case ? 3 g2"set5troGe(neJ Easic5troGe(C"=f))< &reaG<
case 2 3 float das(9: R Q?="=fS<
g2"set5troGe(neJ Easic5troGe(;"=f
Easic5troGe"8APNE022
Easic5troGe"JKI6N/I2E.
?="=f das( ="=f))<
&reaG<
El estilo de punteado de este ejemplo tiene ?= unidades de punteado alternados con ?=
unidades de espacio" El principio del patr%n del punteado se aplica al principio de la
l,nea ** la fase de punteado es ="="
En este ejemplo se usan tres estilos de di&ujo ** s%lido gradiente # polGa" El di&ujo de
color s%lido es un ejemplar de 8olor el gradiente un ejemplar de 4radientPaint # el
patr%n un ejemplar de 2exturePaint"
II 5ets t(e Paint"
"""
case = 3 g2"setPaint(8olor"&lue)< &reaG<
case ? 3 g2"setPaint(neJ 4radientPaint(= =
8olor"lig(t4ra#
J*2>= ( 8olor"&lue false))<
&reaG<
case 2 3 EufferedImage &i R neJ EufferedImage(> >
EufferedImage"2HPENI62N.4E)<
4rap(ics2D &ig R &i"create4rap(ics()<
&ig"set8olor(8olor"&lue)<
&ig"fill.ect(= = > >)<
&ig"set8olor(8olor"lig(t4ra#)<
&ig"fillKval(= = > >)<
.ectangle r R neJ .ectangle(==>>)<
g2"setPaint(neJ 2exturePaint(&i r))<
&reaG<
OPERADORES ARIT#ETICOS:
El soporte de JAI es provisto de operadores aritm'ticos monadic # didicos" En el
monadic los funcionamientos aritm'ticos inclu#en suma del por cada &anda
su&stracci%n multiplicaci%n # divisi%n entre una imagen de la fuente # un valor
constante !ue produce la imagen de destino"
-os funcionamientos aritm'ticos didicos inclu#en suma del por cada &anda
su&stracci%n multiplicaci%n # divisi%n entre dos imgenes fuente para producir una
imagen de destino" 2am&i'n es posi&le tomar el valor a&soluto de pixeles en la imagen
de la fuente # guardar los resultados en una imagen de destino" Exponenciacion
tam&i'n se proporciona"
-as operaciones aritm'ticas re!uieren !ue las imgenes fuente # la imagen del destino
tengan los mismos tipos de datos # n)mero de &andas" El tama7o de las dos imgenes
(altura # anc(ura) sin em&argo no necesita ser el mismo"
8uando las operaciones son realizadas se alinean situaciones del origen para cada
imagen o la sola imagen para las operaciones del monadic" Por ejemplo para la suma de
la imagen el valor a situaci%n == en uno la imagen de la fuente se agrega a situaci%n ==
de la segunda imagen de la fuente # el resultado se guarda en situaci%n == de la imagen
del destino" Este procedimiento se repite para cada p,xel" -as operaciones aritm'ticas
para imgenes onmulti*&anda son realizadas con respecto a la &anda de la imagen
fuente"
5e usan las operaciones aritm'ticas para realizar una com&inaci%n p,xel a p,xel de dos
imgenes o de una imagen con un valor constante
CO#PUESTO:
El JAI del funcionamiento compuesto re!uiere seis parmetros" Dos imgenes de la
fuente dos imgenes del alfa (segundo uno puede ser nulo) una &andera del &oolean
!ue indica si o no el alfa se (a multiplicado a fuentes # destino # una &andera del
+alp(a$irst+ d%nde verdadero indica !ue el cauce del alfa es la primera &anda de la
imagen del destino"
Por ejemplo
p& R neJ ParameterElocG()
p&"add5ource(source?)<
p&"add5ource(source2)<
p&"add(alp(a?)<
p&"add(null)<
p&"add(neJ Eoolean(false))<
destination R JAI"create(+composite+ p& null)<
El funcionamiento compuesto com&ina dos imgenes &asadas en sus valores del alfa a
cada p,xel" Esto se (ace en una &ase por cada &anda # se espera !ue las dos imgenes
de la fuente tengan el mismo n)mero de &andas # el mismo tipo de datos" -a imagen
del destino tiene los mismos tipos de datos de las dos imgenes de la fuente pero con
una &anda extra !ue representa el cauce de alfa resultante"
-os valores de p,xel de destino pueden verse como una representaci%n fraccional de
cada pixel o como un factor de transparencia" especifica los instrumentos compuestos el
Porter*Duff +encima de+ la regla en !ue el color del rendimiento de un pixel con el
triple de valorIalp(a de fuente (A a) # (E &) se da por el aVA T (? * a)V(&VE)" El valor
de alfa de rendimiento se da por a T (? * a)V&" Para el triple de fuentes de
premultiplicado ( aVA a) # ( &VE &) el valor de rendimiento de premultiplicado
simplemente es ( aVA) T (? * a)V(&VE)"
-os canales de color de las dos imgenes fuente son provistos v,a source? # source2"
-as dos fuentes de&en ser cual!uiera los dos pre*multiplicados por el alfa o no" El cauce
del alfa no de&e ser incluido en el source? # source2"
El canal del alfa de las primeras imgenes de la fuente de&e proporcionarse v,a
parmetro del source?Alp(a" Este parmetro no puede ser nulo" El canal del alfa de la
segunda imagen fuente puede proporcionarse v,a parmetro del source2Alp(a" Este
parmetro puede ser nulo en el caso en !ue la segunda fuente es considerada
completamente opaca" -as imgenes del alfa de&en solo*atarse # tiene los mismos
tipos de datos as, como las dimensiones de sus imgenes fuente correspondientes"
El parmetro del alp(aPremultiplied indica si o no la imagen del alfa proporcionada es
el premultiplied a am&as imgenes fuente" 2am&i'n indica si la imagen destino los
canales de color tienen los valores del alfa multiplicados a los valores de color de pixel"
-a imagen del destino es la com&inaci%n de las dos imgenes de la fuente" 2iene los
canales de color # un canal del alfa adicional (el ,ndice de la &anda depende del
parmetro del alp(a$irst)" 5i el valor del alfa tam&i'n se pre*multiplica a los canales de
color este tam&i'n depende del valor de alp(aPremultiplied (pre*multiplic% si
verdadero)"
CONVOLUCION:
El pseudocodigo para el funcionamiento de la convoluci%n en un ejemplo singular
dst9x:9#: es como sigue asumiendo el o&jeto es de tama7o anc(ura x altura # se (a
girado a trav's de ?C= grados" El elemento del Krigen del o&jeto se localiza a la
posici%n (xKrigin #Krigin)3
dst9x:9#: R =<
for( int i R * xKrigin< i X* xKrigin T Jeig(t< iTT) Q
for ( int j R * #Krigin< j X* #Krigin T (ieg(t < jTT) Q
dst9x:9#: T R src9xTi:9#Tj: V Gernel9xKriginTi:9#KriginTj:<
S
S
-a convoluci%n deja una &anda de pixeles alrededor de los &ordes indefinido" Por
ejemplo para un o&jeto ;x; s%lo cuatro elementos del o&jeto # cuatro pixeles de la
fuente contri&u#en al pixel de la convoluci%n en las es!uinas de la imagen de la fuente"
Pixeles !ue no permiten aplicar el o&jeto lleno a la fuente no son incluidos en la imagen
del destino" 0n funcionamiento $ronterizo puede usarse para agregar una frontera
apropiada a la imagen de la fuente para evitar encogimiento de los l,mites de la imagen"
El o&jeto no puede ser ms grande en cual!uier dimensi%n !ue los datos de la imagen"
0n Mernel se caracteriza por su anc(ura altura # origen o el elemento importante" El
elemento importante es el elemento !ue se pone encima del pixel de la fuente actual
para realizar convoluci%n o difusi%n del error" En el caso de tem&lar pedir una serie de
o&jetos de Mernel se re!uiere realmente !ue sea un Mernel por la &anda de la imagen
cam&iada" Para cam&iar se pide la situaci%n del elemento importante !ue de (ec(o no
pertinente"
-a 5o3.o875&E3 es un funcionamiento espacial !ue computa cada muestra del
rendimiento multiplicando elementos de un grano con las muestras !ue rodean una
muestra de la fuente particular"
Para cada muestra del destino el o&jeto se gira ?C= grados # su elemento+ importante u
origen se pone encima del pixel de la fuente !ue corresponde con el pixel del destino"
-os elementos del grano se multiplican con los pixeles de la fuente &ajo ellos # los
productos resultantes se suman para producir el valor de muestra de destino"
=ISTOGRA#A:
-as tareas primarias necesitadas para o&tener un (istograma son como sigue3
?" cree un o&jeto del Distograma !ue especifica el tipo de (istograma a ser generado"
2" cree un funcionamiento del Distograma con los parmetros re!ueridos o crea un
ParameterElocG con los parmetros # pselo al funcionamiento del Distograma"
;" lea los datos del (istograma guardados en el o&jeto"
0n (istograma proporciona una vista del perfil de intensidad de una imagen
&sicamente # normalmente se despliega como un mapa de la &arra" -os valores del
pixel son ordenadas # contados con la suma para cada intensidad puesta en su propia
caja" -as intensidades del pixel se trazan a lo largo del x*eje (orizontal mientras el
n)mero de ocurrencias para cada intensidad se traza a lo largo del #*eje vertical" El
(istograma puede considerarse como la estimaci%n de las pro&a&ilidades !ue un nivel de
intensidad particular ocurrira"
Para una imagen de C &its (a# 2>> posi&les valores de intensidad" As, dada una
imagen de C &its !ue es ?2C por ?2C con los valores todo el juego para poner a cero el
(istograma resultante a una sola &anda tendr,a un solo valor a las = con un valor de
?@;CA con todas las otras cajas !ue contienen el valor de =" -a suma de todos los
resultados en cada caja de&e tener magnitud para el n)mero total de pixeles en la
imagen"
CAPAS:
En JAI las colecciones contienen imgenes del rendera&le o colecciones !ue inclu#en
colecciones de imgenes" Pilas de imagen pirmides o mapas mip por ejemplo"
El funcionamiento de Add8ollection usado en esta demostraci%n toma una colecci%n de
imgenes dadas # agrega cada juego de pixeles uno de cada imagen de la fuente de la
posici%n correspondiente # &anda" Desde !ue los funcionamientos de la colecci%n se
realizan en conjunto los funcionamientos individuales de las imgenes re!uieren
extracci%n reinserci%n de la imagen"
-a clase de la colecci%n es principalmente un mecanismo usado para grupos de
imgenes donde un funcionamiento es igualmente aplicado al grupo entero"
LOOKUT TABLE:
El funcionamiento de -ooGup toma una imagen dada o renderada imagen # una mesa
del looGup # realiza el looGup de la mesa general pasando la imagen de la fuente a
trav's de la mesa"
-a imagen fuente puede ser mono o multi*&anda de tipos de datos us(ort s(ort o int"
El looGupta&le puede ser mono o multi*&anda # de cual!uier JAI soportando los tipos
de los datos" -a imagen destino de&e tener los mismos tipos de datos como la mesa del
looGup # su n)mero de &andas es determinado &asado en el n)mero de &andas de la
fuente # la mesa" 5i la fuente se mono*&anda el destino tiene el mismo n)mero de
&andas como la mesa del looGup< por otra parte el destino tiene el mismo n)mero de
&andas como la fuente"
5i la fuente = del ta&le es mono*&anda # el otro es multi*&anda entonces la mono &anda
se aplica a cada &anda del o&jeto multi*&anda" 5i los dos son multi*&anda entonces sus
&andas correspondiendo se aparean"
El ta&le puede tener un juego de valores del desplazamiento uno para cada &anda" Este
valor se su&strae del pixel de la fuente valorada antes de poner en un ,ndice en la serie
de datos del ta&le"
Es la responsa&ilidad del usuario (acer cierto el looGupta&le proporcionado
conveniente para la imagen fuente" Espec,ficamente los datos del ta&le cu&re el rango
entero de los datos de la fuente" Por otra parte el resultado de este funcionamiento es
indefinido"
Por la naturaleza de este funcionamiento el destino puede tener un n)mero diferente de
&andas #Io tipos de datos de la fuente" El 5ample/odel del destino se crea de acuerdo
con el looGupta&le real usada en un caso espec,fico"
-os valores de pixel de destino se definen por el pseudocodigo3
5i la imagen de la fuente se mono*&anda # el looGupta&le es mono o multi*&anda
entonces la imagen del destino tiene el mismo n)mero de &andas como el looGupta&le3
dst9x:9#:9&: R ta&le9&:9src9x:9#:9=: * offsets9&::
5i la imagen de la fuente es multi*&anda # el looGupta&le es mono*&anda entonces la
imagen del destino tiene el mismo n)mero de &andas como la imagen de la fuente3
dst9x:9#:9&: R ta&le9=:9src9x:9#:9&: * offsets9=::
5i la imagen de la fuente es multi*&anda # el looGupta&le es multi*&anda entonces con
el mismo n)mero de &andas como la imagen fuente la imagen destino tendr el mismo
n)mero de &andas como la imagen fuente3
dst9x:9#:9&: R ta&le9&:9src9x:9#:9&: * offsets9&::
-a modificaci%n del looGupta&le proporciona una transformaci%n de amplitud non*
lineal" -a 6on*liniear amplitud transformaci%n es )til para una variedad de efectos" El
&rillo contraste correcci%n gamma color pseudo # reducci%n colorida son unos
ejemplos de aplicaciones de looGupta&le" El valor del pixel de la imagen esta
diseccionado dentro del looGupta&le" El valor del pixel se reemplaza por los vol)menes
a esa direcci%n"
RENDEREABLE:
Esta demostraci%n utiliza el JAI"create.endera&le () JAI"create5caled.endering ()
m'todos para realizar la &alanza # funcionamientos de imaging de invertido"
El funcionamiento del Invertido invierte los valores del pixel de una imagen" Para las
imgenes de la fuente con los tipos de datos firmados el valor de pixel de la imagen
destino se define por el pseudocodigo3
dst9x:9#:9&: R * src9x:9#:9&:
Para los tipos de los datos sin firmar los valores del destino se definen por3
dst9x:9#:9&: R /AONFA-0E * src9x:9#:9&:
donde /AONFA-0E es el valor mximo apo#ado por el sistema del tipo de los datos
del pixel de la fuente"
-a ar!uitectura de API de rendera&le integra un modelo de independencia con un
paralelo dispositivo*dependiente (dado) modelo" -a porci%n dar*independiente de la
ar!uitectura es un superset del modelo tradicional de imaging dispositivo*dependiente"
-a capa del rendera&le proporciona fuentes de la imagen !ue pueden reusarse m)ltiples
veces en los contextos diferentes como la pantalla despliegue o imprimiendo" -os
operadores del rendera&le toman los parmetros dar*independientes # pueden
encadenarse juntos (el funcionamiento encadena) a para dirigir*ac#clic*grap(s(DA45)"
8ual!uier clase !ue lleva a ca&o la interfaz de .endera&leImage es una fuente del
rendera&le # de&e adaptar a .ender8ontexts" -as imgenes de .endera&le son los
referenciados a trav's del usuario con los sistemas de la coordenada definidos
RENDERABLE SCALE:
-a operaci%n de escala traduce # redimensiona una imagen" Para cada pixel (x #) del
destino el valor de la fuente a la posici%n del su&pixel fraccionaria ((x * x2rans)Ix5cale
(# * #2rans)I#5cale) se constru#e por medio de un o&jeto de la Interpolaci%n # escrito al
destino"
8uando aplica a una escala un factor de escala scaleNx scaleN# a una imagen fuente
con la anc(ura de srcNJidt( # altura de srcN(eig(t la imagen resultante se define para
tener las dimensiones siguientes3
dstNJidt( R srcNJidt( V scaleNx
dstN(eig(t R srcN(eig(t V scaleN#
8uando se especifican interpolaciones !ue re!uieren la fuente al relleno como Eilinear o
interpolaci%n de Eicu&ic la fuente necesita ser extendida tal como los pixeles extras se
necesit% computar todos los pixeles del destino" Esta extensi%n es realizada v,a la clase
de EorderExtender" El tipo de Extensi%n $ronteriza puede especificarse como un
.enderingDint al m'todo de JAI"create"
5i ninguna Extensi%n $ronteriza se especifica la fuente no se extender" El tama7o de la
imagen escalada todav,a es calculado seg)n la f%rmula especificada anteriormente" 6o
(a# &astante fuente sin em&argo su&secuentemente para computar todos los pixeles del
destino s%lo ese su&conjunto de los pixeles de la imagen del destino !ue pueden
computarse se escri&ir en el destino" El resto del destino no se escri&ir"
Especificando un factor de escala ma#or a ? aumenta el tama7o de la imagen
especificando un factor de escala entre = # ? (non*inclusivo) las disminuciones el
tama7o de una imagen" 0n IllegalArgumentException se tirar si los factores de la
escala especificados son negativos o igual a cero"
-a &alanza define un Propert#4enerator !ue realiza una transformaci%n id'ntica en la
propiedad de +.KI+ de la imagen de la fuente !ue puede recuperarse llamando el
m'todo del getPropert# con +.KI+ como el nom&re de propiedad"
-as operaciones rendera&le de escala tiene en cuenta las imgenes de la multi*
resoluci%n para encontrar la imagen con el pr%ximo factor de escala ms grande" Esta
imagen se usa para escalar el tama7o del rendimiento deseado"
U#BRAL:
El funcionamiento del 0m&ral toma uno imagen dada # traza todos los pixeles de esta
imagen cu#o valor se !ueda dentro de un rango especificado a una constante
especificada" El rango se especifica por un valor &ajo # un valor alto"
5i el n)mero de elementos proporcionara v,a el +alto+ +&aja+ # las series de las
+constantes+ son menores del n)mero de &andas de la imagen de la fuente entonces el
elemento de entrada = se aplica a todas las &andas" Por otra parte el elemento de una
entrada diferente se aplica a su &anda correspondiendo"
2(res(olding tam&i'n conocido como la +mejora del contraste &inario+ proporciona un
medios simples de definir los l,mites de o&jetos !ue aparecen en un fondo contrastante"
El funcionamiento del um&ral traza todo el valor del pixel de una imagen !ue oto7o
dentro de un rango dado a uno de un juego de constantes del por*&anda"
El valor de pixel de la imagen del destino &#te define con el pseudocodigo siguiente3
if ( src9x:9#:9&: YR loJ9&: ZZ
src9x:9#:9&: XR (ig(9&: ) Q
dst9x:9#:9&: R constants9&:<
S else Q
dst9x:9#:9&: R src9x:9#:9&:<
S
FARP:
Para torcerse la imagen pueden seleccionarse juegos de puntos usando el &ot%n del
rat%n iz!uierdo" Por ejemplo para el affine apriete el &ot%n del rat%n # arrstrelo a una
nueva situaci%n" 0na l,nea de venda de cauc(o mostrar el camino" 8uando el rat%n se
suelta un par de puntos se mostrar conectado por una l,nea recta" .epita este dos ms
veces" 0n mensaje al fondo de la ventana contar el n)mero de juegos seleccionado"
Pueden arrastrarse los puntos a las nuevas situaciones o los puntos de sumas agregaron
!u' !uiere de nuevo tu'rzase la imagen"
Java Advanced Imaging proporciona una clase de la transformaci%n Jarp !ue se usa
para la transformaci%n de coordenada nolineal de imagen" El pixel posiciona en la clase
de la 0rdim&re se representa usando el fijo*punto coordina la exactitud del su&pixel
productiva pero todav,a permitiendo el uso de aritm'tica del entero" El grado de
precisi%n es fijo por las funciones de JAI apropiadas en el m'todo del Jarp.ect"
El m'todo importante de esta clase es Jarp.ect !ue proporciona las situaciones de los
pixeles en el espacio de la fuente !ue el mapa a una regi%n del rendimiento rectangular
dada" -a regi%n del rendimiento !ue usa las coordenadas del entero normales se
especifica" 5e especifican las posiciones de la fuente vueltas por el m'todo en el fijo*
punto las coordenadas del su&pixel"
Java Advanced Imaging apo#a C funciones de ala&eo3
Po8&3E1&5o
E8 :o8&3o1&o 2)3)(+8
L+ ()-+
C7+d(C0&5o
CG'&5o
E3 :)(6:)50&.+
A44&3)
O:I1+2)
/s all del affine transforma el imagen torcerse es un tipo de transformaci%n
geom'trica !ue introduce la curvatura en el proceso de la cartograf,a" -a introducci%n
de curvatura es importante cuando una imagen se (a torcido a trav's de las a&erraciones
de la lente # otros procesos non*lineales" 2am&i'n puede usarse para la registraci%n de
la imagen"
-as transformaciones torci'ndose tam&i'n conocido como las transformaciones de (oja
de cauc(o pueden estirar una imagen ar&itrariamente so&re los puntos definidos" Este
tipo de funcionamiento proporciona una transformaci%n del nonlinear entre la fuente #
coordenadas del destino"
ARBOL DE =ERENCIA
NOTA: Este r&ol es sacado directamente de la pgina del API Aun!ue identifico
algunas de las funciones utilizadas para el procesamiento de imgenes no comprendo la
gran ma#oria de secciones del ar&ol"
o class java"lang"O'-)50
o class com"sun"media"jai"codec"B#PE35od)P+(+1 (implements
com"sun"media"jai"codec"ImageEncodeParam)
o class javax"media"jai"Bo(d)(E90)3d)( (implements java"io"5erializa&le)
o class javax"media"jai"Bo(d)(E90)3d)(Co360+30
o class javax"media"jai"Bo(d)(E90)3d)(Co:<
o class javax"media"jai"Bo(d)(E90)3d)(R)48)50
o class javax"media"jai"Bo(d)(E90)3d)(F(+:
o class javax"media"jai"Bo(d)(E90)3d)(Z)(o
o class javax"media"jai"util"C+6)8)66S0(&32K)< (implements java"lang"8lonea&le java"io"5erializa&le)
o class javax"media"jai"registr#"CIFR)2&60(<
o class javax"media"jai"Co88)50&o3I1+2) (implements java"util"8ollection javax"media"jai"ImageJAI)
o class javax"media"jai"A00(&'70)dI1+2)Co88)50&o3
o class javax"media"jai"Co88)50&o3O: (implements javax"media"jai"Kperation6ode
java"&eans"Propert#8(ange-istener)
o class javax"media"jai"I1+2)S)H7)35)
o class javax"media"jai"I1+2)S0+5;
o class javax"media"jai"R)3d)()dI1+2)L&60 (implements java"util"-ist
java"aJt"image".enderedImage java"io"5erializa&le)
o class java"aJt"image"Co8o(#od)8 (implements java"aJt"2ransparenc#)
o class java"aJt"image"Co1:o3)30Co8o(#od)8
o class javax"media"jai"F8o+0Do7'8)Co8o(#od)8
o class java"aJt"color"Co8o(S:+5) (implements java"io"5erializa&le)
o class javax"media"jai"Co8o(S:+5)JAI
o class javax"media"jai"I=SCo8o(S:+5)
o class java"aJt"Co1:o3)30 (implements java"aJt"image"ImageK&server java"aJt"/enu8ontainer
java"io"5erializa&le)
o class java"aJt"C+3.+6 (implements javax"accessi&ilit#"Accessi&le)
o class javax"media"jai"C+3.+6JAI
o class javax"media"jai"Jidget"I1+2)C+3.+6
o class java"aJt"Co30+&3)(
o class javax"sJing"JCo1:o3)30 (implements java"io"5erializa&le)
o class javax"sJing"JP+3)8 (implements javax"accessi&ilit#"Accessi&le)
o class com"sun"media"jai"Jidget"D&6:8+<JAI (implements
java"aJt"event"/ouse-istener
java"aJt"event"/ouse/otion-istener)
o class java"aJt"S5(o88P+3) (implements javax"accessi&ilit#"Accessi&le)
o class javax"media"jai"Jidget"S5(o88&32I1+2)P+3)8 (implements
java"aJt"event"Adjustment-istener java"aJt"event"8omponent-istener
java"aJt"event"/ouse-istener java"aJt"event"/ouse/otion-istener)
o class javax"media"jai"Coo(d&3+0)I1+2)
o class javax"media"jai"CRIFI1:8 (implements java"aJt"image"rendera&le"8ontextual.enderedImage$actor#)
o class javax"media"jai"N788CRIF
o class javax"media"jai"registr#"CRIFR)2&60(<
o class java"aJt"image"D+0+B744)(
o class javax"media"jai"D+0+B744)(Do7'8)
o class javax"media"jai"D+0+B744)(F8o+0
o class javax"media"jai"E371)(+0)dP+(+1)0)( (implements java"io"5erializa&le)
o class javax"media"jai"operator"Co8o(Q7+30&B)(T<:)
o class javax"media"jai"operator"Co1:o6&0)D)60A8:>+
o class javax"media"jai"operator"DFTD+0+N+07()
o class javax"media"jai"operator"DFTS5+8&32T<:)
o class javax"media"jai"operator"#+9F&80)(S>+:)
o class javax"media"jai"operator"#)d&+3F&80)(S>+:)
o class javax"media"jai"operator"#&3F&80)(S>+:)
o class javax"media"jai"operator"#o6+&5T<:)
o class javax"media"jai"operator"S>)+(D&(
o class javax"media"jai"operator"T(+36:o6)T<:)
o class java"util"E.)30O'-)50 (implements java"io"5erializa&le)
o class java"&eans"P(o:)(0<C>+32)E.)30
o class javax"media"jai"P(o:)(0<C>+32)E.)30JAI
o class javax"media"jai"Co88)50&o3C>+32)E.)30
o class javax"media"jai"P(o:)(0<So7(5)C>+32)E.)30
o class javax"media"jai"R)3d)(&32C>+32)E.)30
o class com"sun"media"jai"codec"FPID)5od)P+(+1 (implements
com"sun"media"jai"codec"ImageDecodeParam)
o class java"aJt"G(+:>&56
o class java"aJt"G(+:>&56,D
o class javax"media"jai"G(+:>&56JAI
o class javax"media"jai"R)3d)(+'8)G(+:>&56 (implements
java"aJt"image"rendera&le".endera&leImage)
o class javax"media"jai"=&60o2(+1 (implements java"io"5erializa&le)
o class com"sun"media"jai"codec"I1+2)Cod)5
o class com"sun"media"jai"codec"I1+2)D)5od)(I1:8 (implements com"sun"media"jai"codec"ImageDecoder)
o class com"sun"media"jai"codec"I1+2)E35od)(I1:8 (implements com"sun"media"jai"codec"ImageEncoder)
o class javax"media"jai"I1+2)L+<o70 (implements java"lang"8lonea&le java"io"5erializa&le)
o class javax"media"jai"I1+2)#IP#+: (implements javax"media"jai"ImageJAI)
o class javax"media"jai"I1+2)P<(+1&d
o class java"io"I3:70S0()+1
o class com"sun"media"jai"codec"S));+'8)S0()+1 (implements java"io"DataInput)
o class com"sun"media"jai"codec"B<0)A((+<S));+'8)S0()+1
o class com"sun"media"jai"codec"F&8)C+5>)S));+'8)S0()+1
o class com"sun"media"jai"codec"F&8)S));+'8)S0()+1
o class com"sun"media"jai"codec"Fo(/+(dS));+'8)S0()+1
o class com"sun"media"jai"codec"#)1o(<C+5>)S));+'8)S0()+1
o class com"sun"media"jai"codec"S)21)30)dS));+'8)S0()+1
o class javax"media"jai"I30)2)(S)H7)35)
o class javax"media"jai"I30)(:o8+0&o3 (implements java"io"5erializa&le)
o class javax"media"jai"I30)(:o8+0&o3B&8&3)+(
o class javax"media"jai"I30)(:o8+0&o3N)+()60
o class javax"media"jai"I30)(:o8+0&o3T+'8)
o class javax"media"jai"I30)(:o8+0&o3B&57'&5
o class javax"media"jai"I30)(:o8+0&o3B&57'&5,
o class javax"media"jai"JAI
o class com"sun"media"jai"codec"JPEGD)5od)P+(+1 (implements
com"sun"media"jai"codec"ImageDecodeParam)
o class com"sun"media"jai"codec"JPEGE35od)P+(+1 (implements
com"sun"media"jai"codec"ImageEncodeParam)
o class javax"media"jai"K)(3)8JAI (implements java"io"5erializa&le)
o class javax"media"jai"Loo;7:T+'8)JAI (implements java"io"5erializa&le)
o class javax"media"jai"Co8o(C7')
o class javax"media"jai"#780&R)6o870&o3R)3d)(+'8)I1+2) (implements
java"aJt"image"rendera&le".endera&leImage java"io"5erializa&le javax"media"jai"1rita&lePropert#5ource)
o class javax"media"jai"remote"N)2o0&+'8)C+:+'&8&0<S)0 (implements java"io"5erializa&le)
o class javax"media"jai"remote"N)2o0&+'8)Co88)50&o3 (implements javax"media"jai"remote"6egotia&le)
o class javax"media"jai"remote"N)2o0&+'8)N71)(&5 (implements javax"media"jai"remote"6egotia&le)
o class javax"media"jai"remote"N)2o0&+'8)N71)(&5R+32) (implements javax"media"jai"remote"6egotia&le)
o class java"util"O'6)(.+'8)
o class javax"media"jai"D)4)(()dD+0+ (implements java"io"5erializa&le)
o class javax"media"jai"D)4)(()dP(o:)(0< (implements
java"&eans"Propert#8(ange-istener)
o class javax"media"jai"R)5<58&32T&8)F+50o(< (implements javax"media"jai"2ile$actor#
javax"media"jai"2ile.ec#cler)
o class javax"media"jai"O:)(+0&o3D)65(&:0o(I1:8 (implements javax"media"jai"KperationDescriptor
java"io"5erializa&le)
o class javax"media"jai"operator"A'6o870)D)65(&:0o(
o class javax"media"jai"operator"AddCo88)50&o3D)65(&:0o(
o class javax"media"jai"operator"AddCo360D)65(&:0o(
o class javax"media"jai"operator"AddCo360ToCo88)50&o3D)65(&:0o(
o class javax"media"jai"operator"AddD)65(&:0o(
o class javax"media"jai"operator"A44&3)D)65(&:0o(
o class javax"media"jai"operator"A3dCo360D)65(&:0o(
o class javax"media"jai"operator"A3dD)65(&:0o(
o class javax"media"jai"operator"AFTI1+2)D)65(&:0o(
o class javax"media"jai"operator"B+3dCo1'&3)D)65(&:0o(
o class javax"media"jai"operator"B+3d#)(2)D)65(&:0o(
o class javax"media"jai"operator"B+3dS)8)50D)65(&:0o(
o class javax"media"jai"operator"B&3+(&B)D)65(&:0o(
o class javax"media"jai"operator"B#PD)65(&:0o(
o class javax"media"jai"operator"Bo(d)(D)65(&:0o(
o class javax"media"jai"operator"Bo9F&80)(D)65(&:0o(
o class javax"media"jai"operator"C8+1:D)65(&:0o(
o class javax"media"jai"operator"Co8o(Co3.)(0D)65(&:0o(
o class javax"media"jai"operator"Co8o(Q7+30&B)(D)65(&:0o(
o class javax"media"jai"operator"Co1:o6&0)D)65(&:0o(
o class javax"media"jai"operator"Co3-72+0)D)65(&:0o(
o class javax"media"jai"operator"Co360+30D)65(&:0o(
o class javax"media"jai"operator"Co3.o8.)D)65(&:0o(
o class javax"media"jai"operator"C(o:D)65(&:0o(
o class javax"media"jai"operator"DCTD)65(&:0o(
o class javax"media"jai"operator"DFTD)65(&:0o(
o class javax"media"jai"operator"D&8+0)D)65(&:0o(
o class javax"media"jai"operator"D&.&d)B<Co360D)65(&:0o(
o class javax"media"jai"operator"D&.&d)Co1:8)9D)65(&:0o(
o class javax"media"jai"operator"D&.&d)D)65(&:0o(
o class javax"media"jai"operator"D&.&d)I30oCo360D)65(&:0o(
o class javax"media"jai"operator"E35od)D)65(&:0o(
o class javax"media"jai"operator"E(od)D)65(&:0o(
o class javax"media"jai"operator"E((o(D&4476&o3D)65(&:0o(
o class javax"media"jai"operator"E9:D)65(&:0o(
o class javax"media"jai"operator"E90()1+D)65(&:0o(
o class javax"media"jai"operator"F&8)Lo+dD)65(&:0o(
o class javax"media"jai"operator"F&8)S0o()D)65(&:0o(
o class javax"media"jai"operator"F&80)()dS7'6+1:8)D)65(&:0o(
o class javax"media"jai"operator"Fo(1+0D)65(&:0o(
o class javax"media"jai"operator"FPID)65(&:0o(
o class javax"media"jai"operator"GIFD)65(&:0o(
o class javax"media"jai"operator"G(+d&)30#+23&07d)D)65(&:0o(
o class javax"media"jai"operator"=&60o2(+1D)65(&:0o(
o class javax"media"jai"operator"IDCTD)65(&:0o(
o class javax"media"jai"operator"IDFTD)65(&:0o(
o class javax"media"jai"operator"IIPD)65(&:0o(
o class javax"media"jai"operator"IIPR)6o870&o3D)65(&:0o(
o class javax"media"jai"operator"I1+2)F7350&o3D)65(&:0o(
o class javax"media"jai"operator"I3.)(0D)65(&:0o(
o class javax"media"jai"operator"JPEGD)65(&:0o(
o class javax"media"jai"operator"Lo2D)65(&:0o(
o class javax"media"jai"operator"Loo;7:D)65(&:0o(
o class javax"media"jai"operator"#+23&07d)D)65(&:0o(
o class javax"media"jai"operator"#+23&07d)SH7+()dD)65(&:0o(
o class javax"media"jai"operator"#+05>CDFD)65(&:0o(
o class javax"media"jai"operator"#+9D)65(&:0o(
o class javax"media"jai"operator"#+9F&80)(D)65(&:0o(
o class javax"media"jai"operator"#)+3D)65(&:0o(
o class javax"media"jai"operator"#)d&+3F&80)(D)65(&:0o(
o class javax"media"jai"operator"#&3D)65(&:0o(
o class javax"media"jai"operator"#&3F&80)(D)65(&:0o(
o class javax"media"jai"operator"#o6+&5D)65(&:0o(
o class javax"media"jai"operator"#780&:8<Co1:8)9D)65(&:0o(
o class javax"media"jai"operator"#780&:8<Co360D)65(&:0o(
o class javax"media"jai"operator"#780&:8<D)65(&:0o(
o class javax"media"jai"operator"No0D)65(&:0o(
o class javax"media"jai"operator"N788D)65(&:0o(
o class javax"media"jai"operator"O(Co360D)65(&:0o(
o class javax"media"jai"operator"O(d)()dD&0>)(D)65(&:0o(
o class javax"media"jai"operator"O(D)65(&:0o(
o class javax"media"jai"operator"O.)(8+<D)65(&:0o(
o class javax"media"jai"operator"P+00)(3D)65(&:0o(
o class javax"media"jai"operator"P)(&od&5S>&40D)65(&:0o(
o class javax"media"jai"operator"P>+6)D)65(&:0o(
o class javax"media"jai"operator"P&)5)/&6)D)65(&:0o(
o class javax"media"jai"operator"PNGD)65(&:0o(
o class javax"media"jai"operator"PN#D)65(&:0o(
o class javax"media"jai"operator"Po8+(ToCo1:8)9D)65(&:0o(
o class javax"media"jai"operator"R)3d)(+'8)D)65(&:0o(
o class javax"media"jai"operator"R)65+8)D)65(&:0o(
o class javax"media"jai"operator"Ro0+0)D)65(&:0o(
o class javax"media"jai"operator"S5+8)D)65(&:0o(
o class javax"media"jai"operator"S>)+(D)65(&:0o(
o class javax"media"jai"operator"S0()+1D)65(&:0o(
o class javax"media"jai"operator"S7'6+1:8)A.)(+2)D)65(&:0o(
o class javax"media"jai"operator"S7'6+1:8)B&3+(<ToG(+<D)65(&:0o(
o class javax"media"jai"operator"S7'0(+50Co360D)65(&:0o(
o class javax"media"jai"operator"S7'0(+50D)65(&:0o(
o class javax"media"jai"operator"S7'0(+50F(o1Co360D)65(&:0o(
o class javax"media"jai"operator"T>()6>o8dD)65(&:0o(
o class javax"media"jai"operator"TIFFD)65(&:0o(
o class javax"media"jai"operator"T(+368+0)D)65(&:0o(
o class javax"media"jai"operator"T(+36:o6)D)65(&:0o(
o class javax"media"jai"operator"U36>+(:#+6;D)65(&:0o(
o class javax"media"jai"operator"URLD)65(&:0o(
o class javax"media"jai"operator"F+(:D)65(&:0o(
o class javax"media"jai"operator"Io(Co360D)65(&:0o(
o class javax"media"jai"operator"Io(D)65(&:0o(
o class javax"media"jai"O:)(+0&o3Nod)S7::o(0 (implements java"io"5erializa&le)
o class javax"media"jai"O:)(+0&o3R)2&60(< (implements java"io"Externaliza&le)
o class java"io"O70:70S0()+1
o class com"sun"media"jai"codec"S));+'8)O70:70S0()+1
o class javax"media"jai"P+5;)dI1+2)D+0+
o class java"aJt"image"rendera&le"P+(+1)0)(B8o5; (implements java"lang"8lonea&le java"io"5erializa&le)
o class javax"media"jai"P+(+1)0)(B8o5;JAI (implements javax"media"jai"Parameter-ist)
o class javax"media"jai"P+(+1)0)(L&60D)65(&:0o(I1:8 (implements javax"media"jai"Parameter-istDescriptor
java"io"5erializa&le)
o class javax"media"jai"P+(+1)0)(L&60I1:8 (implements javax"media"jai"Parameter-ist java"io"5erializa&le)
o class javax"media"jai"remote"N)2o0&+'8)C+:+'&8&0< (implements java"io"5erializa&le)
o class javax"media"jai"tilecodec"T&8)Cod)5P+(+1)0)(L&60
o class javax"media"jai"P)(6:)50&.)T(+364o(1 (implements java"lang"8lonea&le java"io"5erializa&le)
o class javax"media"jai"P&9)8A55)66o(
o class javax"media"jai"P8+3+(I1+2) (implements javax"media"jai"ImageJAI java"aJt"image".enderedImage)
o class javax"media"jai"O:I1+2)
o class javax"media"jai"A()+O:I1+2)
o class javax"media"jai"G)o1)0(&5O:I1+2)
o class javax"media"jai"S5+8)O:I1+2)
o class javax"media"jai"F+(:O:I1+2)
o class javax"media"jai"Po&30O:I1+2)
o class javax"media"jai"Co8o(1+:O:I1+2)
o class javax"media"jai"N788O:I1+2)
o class javax"media"jai"So7(5)8)66O:I1+2)
o class javax"media"jai"S0+0&60&56O:I1+2)
o class javax"media"jai"U30&8)dO:I1+2)
o class javax"media"jai"remote"P8+3+(I1+2)S)(.)(P(o9< (implements
javax"media"jai"remote".emote.enderedImage)
o class javax"media"jai"R)1o0)I1+2)
o class javax"media"jai"R)3d)()dI1+2)Ad+:0)(
o class javax"media"jai"A00(&'70)dI1+2)
o class javax"media"jai"F(&0+'8)R)3d)()dI1+2)Ad+:0)( (implements
java"aJt"image"1rita&le.enderedImage)
o class javax"media"jai"R)3d)()dO: (implements javax"media"jai"Kperation6ode
java"&eans"Propert#8(ange-istener java"io"5erializa&le)
o class javax"media"jai"remote"R)1o0)R)3d)()dO: (implements
javax"media"jai"remote".emote.enderedImage)
o class javax"media"jai"S3+:6>o0I1+2) (implements java"aJt"image"2ileK&server)
o class javax"media"jai"T&8)dI1+2) (implements java"&eans"Propert#8(ange-istener
java"aJt"image"1rita&le.enderedImage)
o class com"sun"media"jai"codec"PNGD)5od)P+(+1 (implements
com"sun"media"jai"codec"ImageDecodeParam)
o class com"sun"media"jai"codec"PNGE35od)P+(+1 (implements
com"sun"media"jai"codec"ImageEncodeParam)
o class com"sun"media"jai"codec"PNGE35od)P+(+1.G(+<
o class com"sun"media"jai"codec"PNGE35od)P+(+1.P+8)00)
o class com"sun"media"jai"codec"PNGE35od)P+(+1.RGB
o class com"sun"media"jai"codec"PNGS722)60)dP+8)00)E30(< (implements java"io"5erializa&le)
o class com"sun"media"jai"codec"PN#E35od)P+(+1 (implements
com"sun"media"jai"codec"ImageEncodeParam)
o class java"&eans"P(o:)(0<C>+32)S7::o(0 (implements java"io"5erializa&le)
o class javax"media"jai"P(o:)(0<C>+32)S7::o(0JAI
o class javax"media"jai"P(o:)(0<So7(5)I1:8 (implements javax"media"jai"Propert#5ource java"io"5erializa&le)
o class javax"media"jai"F(&0+'8)P(o:)(0<So7(5)I1:8 (implements
javax"media"jai"1rita&lePropert#5ource)
o class javax"media"jai"iterator"R+3do1I0)(F+50o(<
o class javax"media"jai"util"R+32) (implements java"io"5erializa&le)
o class javax"media"jai"R+60)(A55)66o(
o class javax"media"jai"R+60)(F+50o(<
o class javax"media"jai"R+60)(Fo(1+0T+2
o class javax"media"jai"registr#"RCIFR)2&60(<
o class javax"media"jai"iterator"R)50I0)(F+50o(<
o class javax"media"jai"R)2&60(<#od)
o class javax"media"jai"registr#"Co88)50&o3R)2&60(<#od)
o class javax"media"jai"registr#"R)1o0)R)3d)(+'8)R)2&60(<#od)
o class javax"media"jai"registr#"R)1o0)R)3d)()dR)2&60(<#od)
o class javax"media"jai"registr#"R)3d)(+'8)Co88)50&o3R)2&60(<#od)
o class javax"media"jai"registr#"R)3d)(+'8)R)2&60(<#od)
o class javax"media"jai"registr#"R)3d)()dR)2&60(<#od)
o class javax"media"jai"registr#"T&8)D)5od)(R)2&60(<#od)
o class javax"media"jai"registr#"T&8)E35od)(R)2&60(<#od)
o class javax"media"jai"registr#"R)1o0)CRIFR)2&60(<
o class javax"media"jai"remote"R)1o0)D)65(&:0o(I1:8 (implements javax"media"jai"remote".emoteDescriptor)
o class javax"media"jai"remote"JAIR#ID)65(&:0o(
o class javax"media"jai"remote"R)1o0)JAI
o class javax"media"jai"registr#"R)1o0)RIFR)2&60(<
o class javax"media"jai"R)3d)(+'8)I1+2)Ad+:0)( (implements java"aJt"image"rendera&le".endera&leImage
javax"media"jai"1rita&lePropert#5ource)
o class javax"media"jai"R)3d)(+'8)O: (implements javax"media"jai"Kperation6ode
java"aJt"image"rendera&le".endera&leImage java"io"5erializa&le javax"media"jai"1rita&lePropert#5ource)
o class javax"media"jai"remote"R)1o0)R)3d)(+'8)O:
o class javax"media"jai"registr#"RIFR)2&60(<
o class javax"media"jai"ROI (implements java"io"5erializa&le)
o class javax"media"jai"ROIS>+:)
o class javax"media"jai"iterator"Roo;I0)(F+50o(<
o class java"aJt"image"S+1:8)#od)8
o class java"aJt"image"Co1:o3)30S+1:8)#od)8
o class javax"media"jai"Co1:o3)30S+1:8)#od)8JAI
o class javax"media"jai"S)H7)30&+8I1+2)
o class javax"media"jai"remote"S)(&+8&B+'8)R)3d)()dI1+2) (implements java"aJt"image".enderedImage
java"io"5erializa&le)
o class javax"media"jai"remote"S)(&+8&B)(F+50o(<
o class com"sun"media"jai"codec"S0()+1S)21)30
o class java"lang"T>(o/+'8) (implements java"io"5erializa&le)
o class java"lang"E95):0&o3
o class java"lang"R730&1)E95):0&o3
o class javax"media"jai"util"I1+2&32E95):0&o3
o class javax"media"jai"remote"R)1o0)I1+2&32E95):0&o3
o class com"sun"media"jai"codec"TIFFD)5od)P+(+1 (implements
com"sun"media"jai"codec"ImageDecodeParam)
o class com"sun"media"jai"codec"TIFFD&()50o(< (implements java"io"5erializa&le)
o class com"sun"media"jai"codec"TIFFE35od)P+(+1 (implements
com"sun"media"jai"codec"ImageEncodeParam)
o class com"sun"media"jai"codec"TIFFF&)8d (implements java"lang"8ompara&le java"io"5erializa&le)
o class javax"media"jai"tilecodec"T&8)Cod)5D)65(&:0o(I1:8 (implements
javax"media"jai"tilecodec"2ile8odecDescriptor)
o class javax"media"jai"tilecodec"GZIPT&8)Cod)5D)65(&:0o(
o class javax"media"jai"tilecodec"JPEGT&8)Cod)5D)65(&:0o(
o class javax"media"jai"tilecodec"R+/T&8)Cod)5D)65(&:0o(
o class javax"media"jai"tilecodec"T&8)D)5od)(I1:8 (implements javax"media"jai"tilecodec"2ileDecoder)
o class javax"media"jai"registr#"T&8)D)5od)(R)2&60(<
o class javax"media"jai"tilecodec"T&8)E35od)(I1:8 (implements javax"media"jai"tilecodec"2ileEncoder)
o class javax"media"jai"registr#"T&8)E35od)(R)2&60(<
o class javax"media"jai"U3:+5;)dI1+2)D+0+
o class javax"media"jai"F+(: (implements java"io"5erializa&le)
o class javax"media"jai"F+(:G(&d
o class javax"media"jai"F+(:P)(6:)50&.)
o class javax"media"jai"F+(:Po8<3o1&+8
o class javax"media"jai"F+(:A44&3)
o class javax"media"jai"F+(:C7'&5
o class javax"media"jai"F+(:G)3)(+8Po8<3o1&+8
o class javax"media"jai"F+(:Q7+d(+0&5
I30)(4+5) =&)(+(5><
o interface javax"media"jai"C+5>)dT&8)
o interface java"lang"C8o3)+'8)
o interface com"sun"media"jai"codec"I1+2)D)5od)P+(+1 (also extends java"io"5erializa&le)
o interface com"sun"media"jai"codec"I1+2)E35od)P+(+1 (also extends java"lang"8lonea&le
java"io"5erializa&le)
o interface com"sun"media"jai"codec"I1+2)E35od)P+(+1 (also extends
com"sun"media"jai"codec"ImageDecodeParam java"io"5erializa&le)
o interface javax"media"jai"Co88)50&o3I1+2)F+50o(<
o interface javax"media"jai"Co8o(#od)8F+50o(<
o interface java"util"E.)30L&60)3)(
o interface javax"media"jai"T&8)Co1:70+0&o3L&60)3)(
o interface javax"media"jai"Jidget"I1+2)C+3.+6.P+&30L&60)3)(
o interface com"sun"media"jai"codec"I1+2)D)5od)(
o interface com"sun"media"jai"codec"I1+2)E35od)(
o interface javax"media"jai"I1+2)F7350&o3
o interface javax"media"jai"util"I1+2&32L&60)3)(
o interface com"sun"media"jai"remote"JAIS)(.)(Co34&27(+0&o3S:&
o interface javax"media"jai"O:)(+0&o3R)2&60(<S:&
o interface javax"media"jai"P+(+1)0)(L&60
o interface javax"media"jai"P+(+1)0)(L&60D)65(&:0o(
o interface javax"media"jai"P(o:)(0<C>+32)E1&00)(
o interface javax"media"jai"O:)(+0&o3Nod) (also extends javax"media"jai"Propert#5ource)
o interface javax"media"jai"F(&0+'8)P(o:)(0<So7(5) (also extends javax"media"jai"Propert#5ource)
o interface javax"media"jai"I1+2)JAI
o interface javax"media"jai"P(o:)(0<So7(5)
o interface javax"media"jai"O:)(+0&o3Nod) (also extends javax"media"jai"Propert#8(angeEmitter)
o interface javax"media"jai"F(&0+'8)P(o:)(0<So7(5) (also extends javax"media"jai"Propert#8(angeEmitter)
o interface javax"media"jai"I1+2)JAI
o interface javax"media"jai"iterator"R+3do1I0)(
o interface javax"media"jai"iterator"F(&0+'8)R+3do1I0)(
o interface javax"media"jai"iterator"R)50I0)(
o interface javax"media"jai"iterator"Roo;I0)(
o interface javax"media"jai"iterator"F(&0+'8)Roo;I0)( (also extends
javax"media"jai"iterator"1rita&le.ectIter)
o interface javax"media"jai"iterator"F(&0+'8)R)50I0)(
o interface javax"media"jai"iterator"F(&0+'8)Roo;I0)( (also extends
javax"media"jai"iterator".ooGIter)
o interface javax"media"jai"R)2&60(<E8)1)30D)65(&:0o(
o interface javax"media"jai"O:)(+0&o3D)65(&:0o(
o interface javax"media"jai"remote"R)1o0)D)65(&:0o(
o interface javax"media"jai"tilecodec"T&8)Cod)5D)65(&:0o(
o interface javax"media"jai"remote"R)1o0)RIF
o interface javax"media"jai"remote"R)1o0)CRIF
o interface javax"media"jai"R)3d)(+'8)Co88)50&o3I1+2)F+50o(<
o interface java"aJt"image"R)3d)()dI1+2)
o interface javax"media"jai"remote"R)1o0)R)3d)()dI1+2)
o interface java"io"S)(&+8&B+'8)
o interface com"sun"media"jai"codec"I1+2)D)5od)P+(+1 (also extends java"lang"8lonea&le)
o interface com"sun"media"jai"codec"I1+2)E35od)P+(+1 (also extends java"lang"8lonea&le
java"io"5erializa&le)
o interface com"sun"media"jai"codec"I1+2)E35od)P+(+1 (also extends java"lang"8lonea&le
com"sun"media"jai"codec"ImageDecodeParam)
o interface javax"media"jai"remote"N)2o0&+'8)
o interface javax"media"jai"P(o:)(0<G)3)(+0o(
o interface javax"media"jai"remote"S)(&+8&B+'8)S0+0)
o interface javax"media"jai"remote"S)(&+8&B)(
o interface com"sun"media"jai"codec"S0()+1S)21)30#+::)(
o interface javax"media"jai"T&8)C+5>)
o interface javax"media"jai"tilecodec"T&8)D)5od)(
o interface javax"media"jai"tilecodec"T&8)D)5od)(F+50o(<
o interface javax"media"jai"tilecodec"T&8)E35od)(
o interface javax"media"jai"tilecodec"T&8)E35od)(F+50o(<
o interface javax"media"jai"T&8)F+50o(<
o interface javax"media"jai"T&8)R)5<58)(
o interface javax"media"jai"T&8)R)H7)60
o interface javax"media"jai"T&8)S5>)d78)(
o interface javax"media"jai"Jidget"V&)/:o(0L&60)3)(
APLICACIN
6ota3 Aun!ue el tema de procesamiento de imgenes se entiende # son claros los
conceptos # adems de !ue todo eso es aplica&le con java no estuvo en sa&er el poder
realizar un programa !ue mostrara todo lo anteriormente mencionado de&ido a !ue esto
implica una nivel de manejo de java mu# alto o avanzado en cam&io lo !ue si pude
(acer fue investigar varios ejemplos relacionados con el tema # !ue pueden mostrar
claramente como funcionan las aplicaciones de java para el procesamiento avanzado de
imagen"
Ejemplo de (istograma3
import java"io"$ile<
import java"aJt"Eorder-a#out<
import java"aJt"4rid-a#out<
import java"aJt"$loJ-a#out<
import java"aJt"Dimension<
import java"aJt"$ont<
import java"aJt"image"rendera&le"ParameterElocG<
import java"aJt"image"DataEuffer<
import java"aJt"event"V<
import java"aJt"8olor<
import javax"sJing"JPanel<
import javax"sJing"JEutton<
import javax"sJing"J-a&el<
import javax"sJing"&order"Etc(edEorder<
import javax"sJing"&order"-ineEorder<
import javax"sJing"event"V<
import javax"media"jai"JAI<
import javax"media"jai"PlanarImage<
import javax"media"jai"Distogram<
import javax"media"jai"-ooGup2a&leJAI<
import javax"media"jai".enderedKp<
import java"net"0.-<
import java"net"/alformed0.-Exception<
pu&lic class DistogramDemo extends JPanel
implements Action-istener Q
private PlanarImage source R null<
private PlanarImage target R null<
private Panner panner<
private JEutton reset<
private JEutton e!ual<
private JEutton norm<
private JEutton piece<
private ImageDispla# canvas<
private OHPlot grap(<
pu&lic DistogramDemo(5tring filename) Q
tr#
Q
source R JAI"create(+url+ neJ 0.- (filename) )<
S
catc( ( /alformed0.-Exception e)
Q
return<
S
canvas R neJ ImageDispla#(source)<
canvas"set-a#out(neJ $loJ-a#out($loJ-a#out".I4D2 2 2))<
panner R neJ Panner(canvas source ?2C)<
panner"setEacGground(8olor"red)<
panner"setEorder(neJ Etc(edEorder())<
canvas"add(panner)<
$ont font R neJ $ont(+5ans5erif+ $ont"EK-D ?2)<
J-a&el title R neJ J-a&el(+ Distogram+)<
title"set$ont(font)<
title"set-ocation(= ;2)<
setKpa!ue(true)<
set-a#out(neJ Eorder-a#out())<
setEacGground(8olor"J(ite)<
grap( R neJ OHPlot()<
grap("setEacGground(8olor"&lacG)<
grap("setEorder(neJ -ineEorder(neJ 8olor(==2>>) ?))<
8olor&ar c&ar R neJ 8olor&ar()<
c&ar"setEacGground(8olor"&lacG)<
c&ar"setPreferred5ize(neJ Dimension(2>@ 2>))<
c&ar"setEorder(neJ -ineEorder(neJ 8olor(2>>=2>>)2))<
JPanel (istNpanel R neJ JPanel()<
(istNpanel"set-a#out(neJ Eorder-a#out())<
(istNpanel"setEacGground(8olor"J(ite)<
(istNpanel"add(grap( Eorder-a#out"8E62E.)<
(istNpanel"add(c&ar Eorder-a#out"5K02D)<
JPanel panel R neJ JPanel()<
panel"set-a#out(neJ 4rid-a#out(2?>>))<
panel"setEacGground(8olor"J(ite)<
panel"add(canvas)<
panel"add((istNpanel)<
JPanel controlPanel R neJ JPanel()<
controlPanel"set-a#out(neJ $loJ-a#out())<
reset R neJ JEutton(+.eset+)<
e!ual R neJ JEutton(+E!ualize+)<
norm R neJ JEutton(+6ormalize+)<
piece R neJ JEutton(+PieceJise+)<
reset"addAction-istener(t(is)<
e!ual"addAction-istener(t(is)<
norm"addAction-istener(t(is)<
piece"addAction-istener(t(is)<
controlPanel"add(reset)<
controlPanel"add(e!ual)<
controlPanel"add(norm)<
controlPanel"add(piece)<
add(title Eorder-a#out"6K.2D)<
add(panel Eorder-a#out"8E62E.)<
add(controlPanel Eorder-a#out"5K02D)<
II original (istogram (remains unmodified)
grap("plot( getDistogram(source) )<
S
pu&lic int9: getDistogram(PlanarImage image) Q
II set up t(e (istogram
int9: &ins R Q 2>@ S<
dou&le9: loJ R Q ="=D S<
dou&le9: (ig( R Q 2>@"=D S<
Distogram (istogram R neJ Distogram(&ins loJ (ig()<
ParameterElocG p& R neJ ParameterElocG()<
p&"add5ource(image)<
p&"add((istogram)<
p&"add(null)<
p&"add(?)<
p&"add(?)<
.enderedKp op R JAI"create(+(istogram+ p& null)<
(istogram R (Distogram) op"getPropert#(+(istogram+)<
II get (istogram contents
int9: localNarra# R neJ int9(istogram"get6umEins(=):<
for ( int i R =< i X (istogram"get6umEins(=)< iTT ) Q
localNarra#9i: R (istogram"getEin5ize(= i)<
S
return localNarra#<
S
II one Ja# to do t(is (old st#le)
II t(is could also &e done Jit( matc(cdf
pu&lic PlanarImage e!ualize() Q
int sum R =<
&#te9: cumulative R neJ &#te92>@:<
int arra#9: R getDistogram(source)<
float scale R 2>>"=$ I (float) (source"get1idt(() V
source"getDeig(t())<
for ( int i R =< i X 2>@< iTT ) Q
sum TR arra#9i:<
cumulative9i: R (&#te)((sum V scale) T ">$)<
S
-ooGup2a&leJAI looGup R neJ -ooGup2a&leJAI(cumulative)<
ParameterElocG p& R neJ ParameterElocG()<
p&"add5ource(source)<
p&"add(looGup)<
return JAI"create(+looGup+ p& null)<
S
II for a single &and
pu&lic PlanarImage normalize() Q
dou&le9: mean R neJ dou&le9: Q ?2C"= S<
dou&le9: stDev R neJ dou&le9: Q ;A"= S<
float9:9: 8D$norm R neJ float9?:9:<
8D$norm9=: R neJ float92>@:<
dou&le mu R mean9=:<
dou&le tJo5igma5!uared R 2"=VstDev9=:VstDev9=:<
8D$norm9=:9=: R (float)/at("exp(*muVmuItJo5igma5!uared)<
for ( int i R ?< i X 2>@< iTT ) Q
dou&le deviation R i * mu<
8D$norm9=:9i: R 8D$norm9=:9i*?: T
(float)/at("exp(*deviationVdeviationItJo5igma5!uared)<
S
dou&le 8D$norm-ast R 8D$norm9=:92>>:<
for ( int i R =< i X 2>@< iTT ) Q
8D$norm9=:9i: IR 8D$norm-ast<
S
int9: &ins R Q 2>@ S<
dou&le9: loJ R Q ="=D S<
dou&le9: (ig( R Q 2>@"=D S<
Distogram (stgrm R neJ Distogram(&ins loJ (ig()<
.enderedKp fmt R JAI"create(+(istogram+
source
(stgrm
null
neJ Integer(?)
neJ Integer(?))<
return JAI"create(+matc(cdf+ fmt 8D$norm)<
S
pu&lic PlanarImage pieceJise() Q
float9:9:9: &p R neJ float9?:92:9:<
&p9=:9=: R neJ float9: Q ="=$ ;2"=$ @A"=$ 2>>"=$ S<
&p9=:9?: R neJ float9: Q ="=$ ?2C"=$ ??2"=$ 2>>"=$ S<
return JAI"create(+pieceJise+ source &p)<
S
pu&lic void actionPerformed(ActionEvent e) Q
JEutton & R (JEutton)e"get5ource()<
if ( & RR reset ) Q
target R source<
S else if ( & RR e!ual ) Q
target R e!ualize()<
S else if ( & RR norm ) Q
target R normalize()<
S else if ( & RR piece ) Q
target R pieceJise()<
S
canvas"set(target)<
grap("plot( getDistogram(target) )<
S
S