📄 OranliSeciliAlanKeydet.java .java dosyası
⬇️ İndir
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.event.MouseInputAdapter;
public class OranliSeciliAlanKeydet {
private BufferedImage resim;
private Rectangle seciliAlan;
private Point seciliAlanBaslangic;
public OranliSeciliAlanKeydet() throws IOException {
// https://littlevisuals.co/ Bu site Nic Jackson anisina ücretsiz fotograf sunmaktadir.
resim = ImageIO.read(new File("src/images/vana.jpeg"));
seciliAlan = new Rectangle(0, 0, 160, 90); // 16:9 oranli ilk alan
seciliAlanBaslangic = new Point(0, 0);
JPanel panel = new JPanel() {
public void paintComponent(Graphics grafik) {
grafik.drawImage(resim, 0, 0, null);
grafik.drawRect(seciliAlan.x, seciliAlan.y, seciliAlan.width, seciliAlan.height);
}
public Dimension getPreferredSize() { // Panelin ölçüsü resim ölçüsüne ayarlanir...
return new Dimension(resim.getWidth(), resim.getHeight());
}
};
panel.addMouseListener(new MouseInputAdapter() {
public void mousePressed(MouseEvent event) {
seciliAlanBaslangic = event.getPoint();
seciliAlan.setLocation(seciliAlanBaslangic);
}
public void mouseReleased(MouseEvent event) {
kaydet();
kaydetOran();
}
});
panel.addMouseMotionListener(new MouseInputAdapter() {
@Override
public void mouseDragged(MouseEvent e) {
// Oran 1024×576
double oran = 1024.0 / 576.0;
int x = seciliAlanBaslangic.x;
int y = seciliAlanBaslangic.y;
int width = e.getX() - seciliAlanBaslangic.x;
int height = e.getY() - seciliAlanBaslangic.y;
// Yüksekliğe göre genişliği ayarla
if (Math.abs(height) * oran <= Math.abs(width)) {
width = (int) (Math.signum(width) * Math.abs(height) * oran);
}
// Genişliğe göre yüksekliği ayarla
else {
height = (int) (Math.signum(height) * Math.abs(width) / oran);
}
seciliAlan.setBounds(x, y, width, height);
panel.repaint();
}
});
JFrame frame = new JFrame("Oranli Seçili Resim Alanini Kaydet | Java Blackboard [110]");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.getContentPane().add(panel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
// Orana gore seçilen alani ölçüye göre kaydeder ---> ORAN 16:9 ----> ÖLÇÜ 1024×576
private void kaydetOran() {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-d HH-mm-ss");
Date date = new Date();
int genislik = 1024;
int yukseklik = 576;
BufferedImage secilenAlan = resim.getSubimage(seciliAlan.x, seciliAlan.y, seciliAlan.width, seciliAlan.height);
BufferedImage scaledImage = new BufferedImage(genislik, yukseklik, secilenAlan.getType());
Graphics2D graphics = scaledImage.createGraphics();
graphics.drawImage(secilenAlan, 0, 0, genislik, yukseklik, null);
graphics.dispose();
File kaydedilecekDosya = new File("src/images/secilenAlan-"+dateFormat.format(date)+".jpg");
try {
ImageIO.write(scaledImage, "jpg", kaydedilecekDosya);
// System.out.println("Dosya kaydedildi: " + kaydedilecekDosya.getAbsolutePath());
} catch (IOException e) {
e.printStackTrace();
}
}
// Mouse ile seçilen alani kaydeder...
// Mouse ile belirlenen Orijinal olçüde....
private void kaydet() {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-d HH-mm-ss");
Date date = new Date();
BufferedImage secilenAlan = resim.getSubimage(seciliAlan.x, seciliAlan.y, seciliAlan.width, seciliAlan.height);
Graphics2D graphics = secilenAlan.createGraphics();
graphics.drawImage(secilenAlan, 0, 0, seciliAlan.width, seciliAlan.height, null);
graphics.dispose();
File kaydedilecekDosya = new File("src/images/secilenAlan_"+dateFormat.format(date)+".jpg");
try {
ImageIO.write(secilenAlan, "jpg", kaydedilecekDosya);
// System.out.println("Dosya kaydedildi: " + kaydedilecekDosya.getAbsolutePath());
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
try {
new OranliSeciliAlanKeydet();
} catch (IOException e) {
e.printStackTrace();
}
});
}
}