SlideShare ist ein Scribd-Unternehmen logo
1 von 11
*
    Ing. Yeimmy Alejandra Contreras Suárez
* Java2D   ofrece una amplia gama de posibilidades para
  tratamiento de imágenes y figuras geométricas en dos
  dimensiones. En este capítulo se van a tratar los conceptos
  relacionados con el renderizado de imágenes bidimensionales
  mediante la clase Graphics2D.
* Como ya se ha comentado, el verbo renderizar es una
  adaptación al español del verbo inglés render y que define
  un proceso de cálculo más o menos complejo desarrollado
  por un ordenador destinado a producir una imagen o
  secuencia de imágenes. En otros contextos, se habla de
  renderizado para definir el proceso por el cual se pretende
  dibujar, en un lienzo de dos dimensiones, un entorno en tres
  dimensiones      formado    por     estructuras   poligonales
  tridimensionales, luces, texturas y materiales, simulando
  ambientes y estructuras físicas verosímiles. También se habla
  de Renderización en el contexto de procesos 2D que
  requieren cálculos complejos como la edición de vídeo, la
  animación o el desarrollo de efectos visuales.




                               *
import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;
import java.awt.image.*;

public class Ventana extends JFrame {
              public Ventana() {
              super ("Prueba de Ventana");
              Container c = getContentPane();
              c.setLayout(new FlowLayout());
              this.setSize(250,250);
              this.setDefaultCloseOperation(EXIT_ON_CLOSE);
              this.setVisible(true);
              }
public static void main (String [] args) {
              Ventana v = new Ventana();
              }
public void paint (Graphics g) {
              Rectangle2D r2 = new Rectangle2D.Float(75, 50, 100, 25);
              Graphics2D g2 = (Graphics2D)g;
              g2.draw(r2);
              }
}




*
* Si se desea pintar un rectángulo mas grueso se debe tener en
    cuenta el siguiente código
public void paint (Graphics g) {
          Graphics2D g2 = (Graphics2D)g;
          Rectangle2D r2 = new Rectangle2D.Float(75, 50, 100, 25);
Stroke pincel = new BasicStroke(4.0f, BasicStroke.CAP_ROUND,
BasicStroke.JOIN_MITER);
          g2.setStroke(pincel);
          g2.draw(r2);
}
* Tan sólo hay que cambiar el atributo del contexto llamado stroke o
    pincel, para lo cual se suministra el método setStroke(). Una vez
    definido el pincel o lápiz, tan sólo hay que invocar a draw() como
    se ha hecho antes
* Java2D mantiene dos sistemas de coordenadas: las coordenadas de
 usuario (user space) y las coordenadas de dispositivo (device
 space):
  Coordenadas    de Usuario: constituyen un sistema de coordenadas
    totalmente independiente del dispositivo final en el que se vaya a
    hacer el renderizado.
    * El origen de las coordenadas de usuario está situado en la esquina
      superior izquierda del objeto Graphics2D: este punto sería el (0,0). A
      medida que se incrementa la x (primer valor de la coordenada) habrá
      un desplazamiento hacia la derecha y a medida que se incrementa la y
      (segundo valor de la coordenada) habrá un desplazamiento hacia abajo.
  Coordenadas      de Dispositivos: constituyen un sistema de
    coordenadas que sí depende del dispositivo en el cual va a
    renderizarse realmente.
    * Java2D  define tres bloques de información necesarios para soportar la
      conversión entre las coordenadas de usuario y las de dispositivo. Esta
      información se representa mediante tres objetos de las clases:
      GraphicsEnvironment, GraphicsDevice y GraphicsConfiguration.


               *
* En  la tabla siguiente, a modo de resumen, se muestran las
  clases que intervienen en el sistema de coordenadas:




Una situación común en la práctica es la programación en un sistema
multipantalla. Java tiene tres configuraciones distintas de multipantalla, que consisten
en:

• Dos o más pantallas independientes
• Dos o más pantallas en la que una es la principal y las otras visualizan copias de lo
que aparece en la principal.
• Dos o más pantallas que forman un escritorio virtual, al que también se llama
dispositivo virtual (virtual device).

En estas tres configuraciones, cada modo de pantalla se representa con un objeto
GraphicsDevice y cada uno de ellos puede tener muchos objetos GraphicsConfiguration
asociados. Estos objetos permiten crear un objeto Frame, JFrame, Window o JWindow
según un modo de pantalla en el cual va a renderizarse.; por ejemplo, la clase JFrame
posee un constructor que admite como parámetro un objeto GraphicsConfiguration que
sirve para indicar qué configuración debe usarse en su renderizado.
* Si se dispone de un entorno de pantalla virtual entonces,
 debido a que el sistema de coordenadas es relativo al escritorio
 virtual, es necesario usar esas coordenadas virtuales al llamar
 al método setLocation() cuando se quiere colocar o recolocar
 un objeto de tipo Frame o Window en el escritorio. Un ejemplo
 de ello es el siguiente:
       JFrame f = new JFrame(GraphicsConfiguration gc);
       Rectangle limites = gc.getBounds(gc);
       f.setLocation (25 + bounds.x, 25 + bounds.y)
* En este apartado se va a implementar un ejemplo algo más
 avanzado, aunque sigue siendo muy sencillo. El objetivo es
 ilustrar cómo es posible utilizar transparencias en el momento
 de dibujar figuras geométricas o cualquier otra cosa; en otras
 palabras, cuando se dibuja una figura sobre otra, la última
 dibujada no oculta a la de abajo sino que la deja entrever.




                                   *
public void paint (Graphics g) {
               Graphics2D g2 = (Graphics2D)g;
               g2.setColor(Color.red);
               Rectangle2D r1 = new Rectangle2D.Float(250.0f,50.0f,100.0f,100.0f);
               g2.fill(r1);
               AlphaComposite ac =
  AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f);
               g2.setColor(Color.green);
               g2.setComposite(ac);
               Rectangle2D r2 = new Rectangle2D.Float(200.0f,100.0f,100.0f,100.0f);
               g2.fill(r2);
               ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1.0f);
               g2.setColor(Color.magenta);
               g2.setComposite(ac);
               Rectangle2D r3 = new Rectangle2D.Float(150.0f,150.0f,100.0f,100.0f);
               g2.fill(r3);
               ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.8f);
               g2.setColor(Color.yellow);
               g2.setComposite(ac);
               Rectangle2D r4 = new Rectangle2D.Float(100.0f,200.0f,100.0f,100.0f);
  }


La línea de código en la que se define la transparencia es:

AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f);
*   Cuando se construye un objeto de la clase AlphaComposite (con la función estática getInstance() ya que
    la clase AlphaComposite carece de constructor), puede especificarse un valor para el canal alfa. Cuando
    se incorpora este objeto AlphaComposite al contexto de Graphics2D, este valor alfa extra incrementa la
*   transparencia de cualquier objeto gráfico que se renderice posteriormente. El valor que pueda tener
    cada objeto gráfico por sí mismo es multiplicado por el valor alfa del AlphaComposite.
*   En la tabla siguiente se pueden apreciar los dos métodos para definir transparencias de la clase
    AlphaComposite:
* Desarrolle la siguiente imagen utilizando transparencias




                   *

Weitere ähnliche Inhalte

Andere mochten auch

JustTrace: Analiza tu aplicación
JustTrace: Analiza tu aplicaciónJustTrace: Analiza tu aplicación
JustTrace: Analiza tu aplicaciónJulito Avellaneda
 
Game of Frameworks - GDG Cáceres #CodeCC
Game of Frameworks - GDG Cáceres #CodeCCGame of Frameworks - GDG Cáceres #CodeCC
Game of Frameworks - GDG Cáceres #CodeCCCarlos Azaustre
 
ASAP methodology overview
ASAP methodology overviewASAP methodology overview
ASAP methodology overviewBogdan Gorka
 
ASAP Methodology
ASAP MethodologyASAP Methodology
ASAP Methodologyarun_bala1
 
Presentacion pirineos
Presentacion pirineosPresentacion pirineos
Presentacion pirineossergioeladome
 
Alemanestragones
AlemanestragonesAlemanestragones
Alemanestragonestakis22
 
Digitales mexico
Digitales mexicoDigitales mexico
Digitales mexicosabbyval
 
Trabajo final
Trabajo finalTrabajo final
Trabajo finalnarriondo
 
Maria luisa molina_medina
Maria luisa molina_medinaMaria luisa molina_medina
Maria luisa molina_medinamariamolina1
 
Présentations 1 cours 2007-2008
Présentations 1 cours 2007-2008Présentations 1 cours 2007-2008
Présentations 1 cours 2007-2008laprofdefran
 
Es para t._
Es para t._Es para t._
Es para t._L3Nhita
 
Desmontaje De La Computadora
Desmontaje  De  La  ComputadoraDesmontaje  De  La  Computadora
Desmontaje De La Computadoralacc20
 
Cepr08 pps act2_equipo3_final2
Cepr08 pps act2_equipo3_final2Cepr08 pps act2_equipo3_final2
Cepr08 pps act2_equipo3_final2cepr08TAC
 

Andere mochten auch (20)

Java 2D
Java 2DJava 2D
Java 2D
 
JustTrace: Analiza tu aplicación
JustTrace: Analiza tu aplicaciónJustTrace: Analiza tu aplicación
JustTrace: Analiza tu aplicación
 
Game of Frameworks - GDG Cáceres #CodeCC
Game of Frameworks - GDG Cáceres #CodeCCGame of Frameworks - GDG Cáceres #CodeCC
Game of Frameworks - GDG Cáceres #CodeCC
 
ASAP methodology overview
ASAP methodology overviewASAP methodology overview
ASAP methodology overview
 
ASAP Methodology
ASAP MethodologyASAP Methodology
ASAP Methodology
 
Presentacion pirineos
Presentacion pirineosPresentacion pirineos
Presentacion pirineos
 
Fòrum Atenció Primària - Prescripció Farmacèutica
Fòrum Atenció Primària - Prescripció FarmacèuticaFòrum Atenció Primària - Prescripció Farmacèutica
Fòrum Atenció Primària - Prescripció Farmacèutica
 
Web 2
Web 2Web 2
Web 2
 
Alemanestragones
AlemanestragonesAlemanestragones
Alemanestragones
 
Digitales mexico
Digitales mexicoDigitales mexico
Digitales mexico
 
Trabajo final
Trabajo finalTrabajo final
Trabajo final
 
COMPETITIVIDAD
COMPETITIVIDADCOMPETITIVIDAD
COMPETITIVIDAD
 
Maria luisa molina_medina
Maria luisa molina_medinaMaria luisa molina_medina
Maria luisa molina_medina
 
Geschäftsbericht 2011
Geschäftsbericht 2011Geschäftsbericht 2011
Geschäftsbericht 2011
 
Teatrodp36c
Teatrodp36cTeatrodp36c
Teatrodp36c
 
Marktsplits - Tools für das Strategische Management
Marktsplits - Tools für das Strategische ManagementMarktsplits - Tools für das Strategische Management
Marktsplits - Tools für das Strategische Management
 
Présentations 1 cours 2007-2008
Présentations 1 cours 2007-2008Présentations 1 cours 2007-2008
Présentations 1 cours 2007-2008
 
Es para t._
Es para t._Es para t._
Es para t._
 
Desmontaje De La Computadora
Desmontaje  De  La  ComputadoraDesmontaje  De  La  Computadora
Desmontaje De La Computadora
 
Cepr08 pps act2_equipo3_final2
Cepr08 pps act2_equipo3_final2Cepr08 pps act2_equipo3_final2
Cepr08 pps act2_equipo3_final2
 

Ähnlich wie Renderización en java

Introducción a las librerías PyGame y PyOpenGL
Introducción a las librerías PyGame y PyOpenGLIntroducción a las librerías PyGame y PyOpenGL
Introducción a las librerías PyGame y PyOpenGLkdeespana
 
Intro opengl
Intro openglIntro opengl
Intro openglsispro
 
Practicas para slider Rene Dominguez
Practicas para slider Rene Dominguez Practicas para slider Rene Dominguez
Practicas para slider Rene Dominguez Mery_Angie_Ugalde
 
Ventilador adaptativo
Ventilador adaptativoVentilador adaptativo
Ventilador adaptativoJuan Garza
 
Ventilador adaptativo
Ventilador adaptativoVentilador adaptativo
Ventilador adaptativoJuan Garza
 
Api java 2D
Api  java 2DApi  java 2D
Api java 2DESPOL
 
Open gl tutorial diana hernandez 303
Open gl tutorial diana hernandez 303Open gl tutorial diana hernandez 303
Open gl tutorial diana hernandez 303Pablo Solis
 
Proyecto de reneya terminado
Proyecto de reneya terminadoProyecto de reneya terminado
Proyecto de reneya terminadojesicecytem
 
Proyecto de reneya terminado
Proyecto de reneya terminadoProyecto de reneya terminado
Proyecto de reneya terminadoKaren_Avilaa
 
Desarrollo de Videojuegos Android con Cocos2D
Desarrollo de Videojuegos Android con Cocos2DDesarrollo de Videojuegos Android con Cocos2D
Desarrollo de Videojuegos Android con Cocos2DJordan-P
 
Practicas OpenglC++
Practicas OpenglC++Practicas OpenglC++
Practicas OpenglC++jesicecytem
 
Manual de practicas de Open GL
Manual de practicas de Open GLManual de practicas de Open GL
Manual de practicas de Open GLAlincita Simon
 

Ähnlich wie Renderización en java (20)

Introducción a las librerías PyGame y PyOpenGL
Introducción a las librerías PyGame y PyOpenGLIntroducción a las librerías PyGame y PyOpenGL
Introducción a las librerías PyGame y PyOpenGL
 
Inicialización del modo gráfico de C
Inicialización del modo gráfico de CInicialización del modo gráfico de C
Inicialización del modo gráfico de C
 
Intro opengl
Intro openglIntro opengl
Intro opengl
 
Practicas para slider Rene Dominguez
Practicas para slider Rene Dominguez Practicas para slider Rene Dominguez
Practicas para slider Rene Dominguez
 
Ventilador adaptativo
Ventilador adaptativoVentilador adaptativo
Ventilador adaptativo
 
Ventilador adaptativo
Ventilador adaptativoVentilador adaptativo
Ventilador adaptativo
 
Api java 2D
Api  java 2DApi  java 2D
Api java 2D
 
Open gl tutorial diana hernandez 303
Open gl tutorial diana hernandez 303Open gl tutorial diana hernandez 303
Open gl tutorial diana hernandez 303
 
Proyecto de reneya terminado
Proyecto de reneya terminadoProyecto de reneya terminado
Proyecto de reneya terminado
 
Proyecto de reneya terminado
Proyecto de reneya terminadoProyecto de reneya terminado
Proyecto de reneya terminado
 
Estela y naye
Estela y nayeEstela y naye
Estela y naye
 
Lab2-POO
Lab2-POOLab2-POO
Lab2-POO
 
Desarrollo de Videojuegos Android con Cocos2D
Desarrollo de Videojuegos Android con Cocos2DDesarrollo de Videojuegos Android con Cocos2D
Desarrollo de Videojuegos Android con Cocos2D
 
Practicas OpenglC++
Practicas OpenglC++Practicas OpenglC++
Practicas OpenglC++
 
Programación grafica en lenguaje c
Programación grafica en lenguaje cProgramación grafica en lenguaje c
Programación grafica en lenguaje c
 
Java 2 d
Java 2 dJava 2 d
Java 2 d
 
Java tema06a
Java tema06aJava tema06a
Java tema06a
 
Opengl
OpenglOpengl
Opengl
 
Manual de practicas de Open GL
Manual de practicas de Open GLManual de practicas de Open GL
Manual de practicas de Open GL
 
Separata java script
Separata java scriptSeparata java script
Separata java script
 

Mehr von aleja0940

Tabbed pane y excepciones
Tabbed pane y excepcionesTabbed pane y excepciones
Tabbed pane y excepcionesaleja0940
 
Interfaz gráfica de usuario
Interfaz gráfica de usuarioInterfaz gráfica de usuario
Interfaz gráfica de usuarioaleja0940
 
Ejemplo Circulo y Cuadrado con Factory
Ejemplo Circulo y Cuadrado con FactoryEjemplo Circulo y Cuadrado con Factory
Ejemplo Circulo y Cuadrado con Factoryaleja0940
 
Patrones de diseño
Patrones de diseñoPatrones de diseño
Patrones de diseñoaleja0940
 
Proyecto instalacion red local
Proyecto instalacion red localProyecto instalacion red local
Proyecto instalacion red localaleja0940
 
Metodos en java
Metodos en javaMetodos en java
Metodos en javaaleja0940
 

Mehr von aleja0940 (6)

Tabbed pane y excepciones
Tabbed pane y excepcionesTabbed pane y excepciones
Tabbed pane y excepciones
 
Interfaz gráfica de usuario
Interfaz gráfica de usuarioInterfaz gráfica de usuario
Interfaz gráfica de usuario
 
Ejemplo Circulo y Cuadrado con Factory
Ejemplo Circulo y Cuadrado con FactoryEjemplo Circulo y Cuadrado con Factory
Ejemplo Circulo y Cuadrado con Factory
 
Patrones de diseño
Patrones de diseñoPatrones de diseño
Patrones de diseño
 
Proyecto instalacion red local
Proyecto instalacion red localProyecto instalacion red local
Proyecto instalacion red local
 
Metodos en java
Metodos en javaMetodos en java
Metodos en java
 

Renderización en java

  • 1. * Ing. Yeimmy Alejandra Contreras Suárez
  • 2. * Java2D ofrece una amplia gama de posibilidades para tratamiento de imágenes y figuras geométricas en dos dimensiones. En este capítulo se van a tratar los conceptos relacionados con el renderizado de imágenes bidimensionales mediante la clase Graphics2D. * Como ya se ha comentado, el verbo renderizar es una adaptación al español del verbo inglés render y que define un proceso de cálculo más o menos complejo desarrollado por un ordenador destinado a producir una imagen o secuencia de imágenes. En otros contextos, se habla de renderizado para definir el proceso por el cual se pretende dibujar, en un lienzo de dos dimensiones, un entorno en tres dimensiones formado por estructuras poligonales tridimensionales, luces, texturas y materiales, simulando ambientes y estructuras físicas verosímiles. También se habla de Renderización en el contexto de procesos 2D que requieren cálculos complejos como la edición de vídeo, la animación o el desarrollo de efectos visuales. *
  • 3. import javax.swing.*; import java.awt.*; import java.awt.geom.*; import java.awt.image.*; public class Ventana extends JFrame { public Ventana() { super ("Prueba de Ventana"); Container c = getContentPane(); c.setLayout(new FlowLayout()); this.setSize(250,250); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.setVisible(true); } public static void main (String [] args) { Ventana v = new Ventana(); } public void paint (Graphics g) { Rectangle2D r2 = new Rectangle2D.Float(75, 50, 100, 25); Graphics2D g2 = (Graphics2D)g; g2.draw(r2); } } *
  • 4. * Si se desea pintar un rectángulo mas grueso se debe tener en cuenta el siguiente código public void paint (Graphics g) { Graphics2D g2 = (Graphics2D)g; Rectangle2D r2 = new Rectangle2D.Float(75, 50, 100, 25); Stroke pincel = new BasicStroke(4.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER); g2.setStroke(pincel); g2.draw(r2); } * Tan sólo hay que cambiar el atributo del contexto llamado stroke o pincel, para lo cual se suministra el método setStroke(). Una vez definido el pincel o lápiz, tan sólo hay que invocar a draw() como se ha hecho antes
  • 5. * Java2D mantiene dos sistemas de coordenadas: las coordenadas de usuario (user space) y las coordenadas de dispositivo (device space): Coordenadas de Usuario: constituyen un sistema de coordenadas totalmente independiente del dispositivo final en el que se vaya a hacer el renderizado. * El origen de las coordenadas de usuario está situado en la esquina superior izquierda del objeto Graphics2D: este punto sería el (0,0). A medida que se incrementa la x (primer valor de la coordenada) habrá un desplazamiento hacia la derecha y a medida que se incrementa la y (segundo valor de la coordenada) habrá un desplazamiento hacia abajo. Coordenadas de Dispositivos: constituyen un sistema de coordenadas que sí depende del dispositivo en el cual va a renderizarse realmente. * Java2D define tres bloques de información necesarios para soportar la conversión entre las coordenadas de usuario y las de dispositivo. Esta información se representa mediante tres objetos de las clases: GraphicsEnvironment, GraphicsDevice y GraphicsConfiguration. *
  • 6. * En la tabla siguiente, a modo de resumen, se muestran las clases que intervienen en el sistema de coordenadas: Una situación común en la práctica es la programación en un sistema multipantalla. Java tiene tres configuraciones distintas de multipantalla, que consisten en: • Dos o más pantallas independientes • Dos o más pantallas en la que una es la principal y las otras visualizan copias de lo que aparece en la principal. • Dos o más pantallas que forman un escritorio virtual, al que también se llama dispositivo virtual (virtual device). En estas tres configuraciones, cada modo de pantalla se representa con un objeto GraphicsDevice y cada uno de ellos puede tener muchos objetos GraphicsConfiguration asociados. Estos objetos permiten crear un objeto Frame, JFrame, Window o JWindow según un modo de pantalla en el cual va a renderizarse.; por ejemplo, la clase JFrame posee un constructor que admite como parámetro un objeto GraphicsConfiguration que sirve para indicar qué configuración debe usarse en su renderizado.
  • 7. * Si se dispone de un entorno de pantalla virtual entonces, debido a que el sistema de coordenadas es relativo al escritorio virtual, es necesario usar esas coordenadas virtuales al llamar al método setLocation() cuando se quiere colocar o recolocar un objeto de tipo Frame o Window en el escritorio. Un ejemplo de ello es el siguiente: JFrame f = new JFrame(GraphicsConfiguration gc); Rectangle limites = gc.getBounds(gc); f.setLocation (25 + bounds.x, 25 + bounds.y)
  • 8. * En este apartado se va a implementar un ejemplo algo más avanzado, aunque sigue siendo muy sencillo. El objetivo es ilustrar cómo es posible utilizar transparencias en el momento de dibujar figuras geométricas o cualquier otra cosa; en otras palabras, cuando se dibuja una figura sobre otra, la última dibujada no oculta a la de abajo sino que la deja entrever. *
  • 9. public void paint (Graphics g) { Graphics2D g2 = (Graphics2D)g; g2.setColor(Color.red); Rectangle2D r1 = new Rectangle2D.Float(250.0f,50.0f,100.0f,100.0f); g2.fill(r1); AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f); g2.setColor(Color.green); g2.setComposite(ac); Rectangle2D r2 = new Rectangle2D.Float(200.0f,100.0f,100.0f,100.0f); g2.fill(r2); ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1.0f); g2.setColor(Color.magenta); g2.setComposite(ac); Rectangle2D r3 = new Rectangle2D.Float(150.0f,150.0f,100.0f,100.0f); g2.fill(r3); ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.8f); g2.setColor(Color.yellow); g2.setComposite(ac); Rectangle2D r4 = new Rectangle2D.Float(100.0f,200.0f,100.0f,100.0f); } La línea de código en la que se define la transparencia es: AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f);
  • 10. * Cuando se construye un objeto de la clase AlphaComposite (con la función estática getInstance() ya que la clase AlphaComposite carece de constructor), puede especificarse un valor para el canal alfa. Cuando se incorpora este objeto AlphaComposite al contexto de Graphics2D, este valor alfa extra incrementa la * transparencia de cualquier objeto gráfico que se renderice posteriormente. El valor que pueda tener cada objeto gráfico por sí mismo es multiplicado por el valor alfa del AlphaComposite. * En la tabla siguiente se pueden apreciar los dos métodos para definir transparencias de la clase AlphaComposite:
  • 11. * Desarrolle la siguiente imagen utilizando transparencias *