*    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...
import javax.swing.*;import java.awt.*;import java.awt.geom.*;import java.awt.image.*;public class Ventana extends JFrame ...
* Si se desea pintar un rectángulo mas grueso se debe tener en    cuenta el siguiente códigopublic void paint (Graphics g)...
* Java2D mantiene dos sistemas de coordenadas: las coordenadas de usuario (user space) y las coordenadas de dispositivo (d...
* En  la tabla siguiente, a modo de resumen, se muestran las  clases que intervienen en el sistema de coordenadas:Una situ...
* Si se dispone de un entorno de pantalla virtual entonces, debido a que el sistema de coordenadas es relativo al escritor...
* En este apartado se va a implementar un ejemplo algo más avanzado, aunque sigue siendo muy sencillo. El objetivo es ilus...
public void paint (Graphics g) {               Graphics2D g2 = (Graphics2D)g;               g2.setColor(Color.red);       ...
*   Cuando se construye un objeto de la clase AlphaComposite (con la función estática getInstance() ya que    la clase Alp...
* Desarrolle la siguiente imagen utilizando transparencias                   *
Upcoming SlideShare
Loading in …5
×

Renderización en java

2,766 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,766
On SlideShare
0
From Embeds
0
Number of Embeds
86
Actions
Shares
0
Downloads
27
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Renderización en java

  1. 1. * Ing. Yeimmy Alejandra Contreras Suárez
  2. 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. 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. 4. * Si se desea pintar un rectángulo mas grueso se debe tener en cuenta el siguiente códigopublic 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. 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. 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 sistemamultipantalla. Java tiene tres configuraciones distintas de multipantalla, que consistenen:• Dos o más pantallas independientes• Dos o más pantallas en la que una es la principal y las otras visualizan copias de loque aparece en la principal.• Dos o más pantallas que forman un escritorio virtual, al que también se llamadispositivo virtual (virtual device).En estas tres configuraciones, cada modo de pantalla se representa con un objetoGraphicsDevice y cada uno de ellos puede tener muchos objetos GraphicsConfigurationasociados. Estos objetos permiten crear un objeto Frame, JFrame, Window o JWindowsegún un modo de pantalla en el cual va a renderizarse.; por ejemplo, la clase JFrameposee un constructor que admite como parámetro un objeto GraphicsConfiguration quesirve para indicar qué configuración debe usarse en su renderizado.
  7. 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. 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. 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. 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. 11. * Desarrolle la siguiente imagen utilizando transparencias *

×