Transformaciones de imágenes Bidimensionales en Java
DESARROLLO
Clase Principal
import javax.swing.JOptionPane;
public class Main {
public static void main (String[]args){
Traslacion obj=new Traslacion();
Rotacion obj1=new Rotacion();
Escalamiento obj2=new Escalamiento();
Sesgado obj3=new Sesgado();
int a = JOptionPane.showOptionDialog(null,"Seleccione opcion","Selector de opciones",JOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE,null,new Object[] { "Traslacion", "Rotacion", "Escalamiento","Sesgado" },"Traslacion");
switch(a){
case 0:
Traslacion.main(args);
break;
case 1:
Rotacion.main(args);
break;
case 2:
Escalamiento.main(args);
break;
case 3:
Sesgado.main(args);
break;
}
}
}
Clase Traslación
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
class tras extends JPanel {
private void doDrawing(Graphics g) {
Graphics2D g2d = (Graphics2D) g.create();
g2d.setPaint(new Color(150, 150, 150));
g2d.fillRect(100, 150, 150, 150);
g2d.translate(200, 0);
g2d.fillRect(100, 150, 150, 150);
g2d.dispose();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
doDrawing(g);
}
}
public class Traslacion extends JFrame {
public Traslacion() {
initUI();
}
private void initUI() {
add(new tras());
setTitle("Traslacion");
setSize(500, 500);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
Traslacion ex = new Traslacion();
ex.setVisible(true);
}
});
}
}
Clase Rotación
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
class rot extends JPanel {
private void doDrawing(Graphics g) {
Graphics2D g2d = (Graphics2D) g.create();
g2d.setPaint(new Color(150, 150, 150));
g2d.fillRect(100, 150, 150, 150);
g2d.translate(400, -50);
g2d.rotate(Math.PI/4);
g2d.fillRect(100, 150, 150, 150);
g2d.dispose();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
doDrawing(g);
}
}
public class Rotacion extends JFrame {
public Rotacion() {
nitUI();
}
private void initUI() {
setTitle("Rotacion");
add(new rot());
setSize(500, 500);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
Rotacion ex = new Rotacion();
ex.setVisible(true);
}
});
}
}
Clase Escalamiento
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import javax.swing.JFrame;
import javax.swing.JPanel;
class esc extends JPanel {
private void doDrawing(Graphics g) {
Graphics2D g2d = (Graphics2D) g.create();
g2d.setColor(new Color(150, 150, 150));
g2d.fillRect(100,100,100,100);
AffineTransform tx1 = new AffineTransform();
tx1.translate(0, 200);
tx1.scale(0.5, 0.5);
g2d.setTransform(tx1);
g2d.fillRect(100,100,100,100);
AffineTransform tx2 = new AffineTransform();
tx2.translate(100, 100);
tx2.scale(1.5, 1.5);
g2d.setTransform(tx2);
g2d.fillRect(100,100,100,100);
g2d.dispose();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
doDrawing(g);
}
}
public class Escalamiento extends JFrame {
public Escalamiento() {
initUI();
}
private void initUI() {
add(new esc());
setTitle("Escalado");
setSize(500, 500);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
Escalamiento ex = new Escalamiento();
ex.setVisible(true);
}
});
}
}
Clase Sesgado
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.geom.AffineTransform;
import javax.swing.JFrame;
import javax.swing.JPanel;
class ses extends JPanel {
private void doDrawing(Graphics g) {
Graphics2D g2d = (Graphics2D) g.create();
AffineTransform tx1 = new AffineTransform();
tx1.translate(50, 90);
g2d.setTransform(tx1);
g2d.setPaint(Color.yellow);
g2d.drawRect(0, 0, 150, 150);
AffineTransform tx2 = new AffineTransform();
tx2.translate(0, 250);
tx2.shear(1, 0);
g2d.setTransform(tx2);
g2d.setPaint(Color.black);
g2d.draw(new Rectangle(0, 0, 150, 150));
AffineTransform tx3 = new AffineTransform();
tx3.translate(250, 0);
tx3.shear(0, 1);
g2d.setTransform(tx3);
g2d.setPaint(Color.red);
g2d.drawRect(0, 0, 150, 150);
g2d.dispose();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
doDrawing(g);
}
}
public class Sesgado extends JFrame {
public Sesgado() {
initUI();
}
private void initUI() {
add(new ses());
setTitle("Sesgado");
setSize(500, 500);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
Sesgado ex = new Sesgado();
ex.setVisible(true);
}
});
}
}
CONCLUSIÓN
Dentro de las imágenes bidimensionales se pueden realizar un gran numero de transformaciones, las transformaciones principales que son mas usadas son la Traslación donde una imagen cambia de posición, Rotación donde una imagen es rotada, Escalamiento donde se cambia de tamaño la imagen y finalmente Sesgado que es la transformación mas complicada donde se inclinan las imágenes.
De las diversas transformaciones que se pueden realizar dentro de las imágenes bidimensionales pueden ser encontradas en una inmensa variedad de software, desde visualizadores de imagen como el predeterminado que encontramos en Windows hasta cosas que cuentan con un nivel de complejidad mayor como Photoshop o Gimp, gracias a esto nuestra percepción sobre la complejidad con la que cuentan estas transformaciones en computadora se ha visto tintada por la facilidad que nos proporcionan estos software para realizar estas operaciones.
A pesar de que estas transformaciones se pueden encontrar dentro de una gran variedad de Software tanto de edición como para la visualización de imágenes, es muy poco probable que el trabajo que se necesita hacer dentro de la computadora para realizar una de estas operaciones no es claro, para realizar estas operaciones se necesita invertir cierta cantidad de tiempo y esfuerzo en código, esto se hace con el fin de que no salten errores y exista una cierta fluidez en el código.
El realizar las transformaciones imágenes bidimensionales dentro de Java nos puede dar una nueva perspectiva sobre el trabajo que se realiza dentro de una computadora al momento de realizar alguna de estas operaciones dentro de un software nos permita transformar dichas imágenes.
En Java es algo complicado realizar estas operaciones, porque se necesitan reajustar las dimensiones con las que contaba la imagen ya que al realizar alguna de estas operaciones las dimensiones suelen cambiar.
BIBLIOGRAFÍA
Abhani, N. (2019, 15 noviembre). Image Rotation In Java. Java PDF Blog. https://blog.idrsolutions.com/2019/05/image-rotation-in-java/#:%7E:text=The%20simplest%20way%20to%20rotate,load%20and%20save%20the%20image.
Bodnar, J. (2007). Transformations in Java 2D. Zetcode. http://zetcode.com/gfx/java2d/transformations/
Cloudinary. (2020). Java Image Transformations | Cloudinary. https://cloudinary.com/documentation/java_image_manipulation
Oracle. (1995). Transforming Shapes, Text, and Images (The JavaTM Tutorials > 2D Graphics > Advanced Topics in Java2D). https://docs.oracle.com/javase/tutorial/2d/advanced/transforming.html
Tutorialspoint. (2020). Java Programming Examples – Tutorialspoint. https://www.tutorialspoint.com/javaexamples/
Comments
Post a Comment