[Java] Image bij rotaten kleiner dan origineel

Pagina: 1
Acties:

  • Gardocki
  • Registratie: Oktober 2000
  • Niet online
Hoi,

Ik ben bezig een progje te maken dat een BufferedImage draait. Nu lijkt dit heel simpel, maar ik heb een raar probleem. Bij het draaien wordt de gedraaide image kleiner (+-15 pixels) weergegeven op het scherm, terwijl de dimensies hetzelfde blijven bij het debuggen. Iemand een idee hoe dit kan?

Hier is de code:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
package testpixels;

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.AffineTransform;
import java.awt.image.*;
import java.io.*;
import javax.imageio.ImageIO;
import javax.swing.*;

public class Main extends JFrame implements MouseListener {
    
    BufferedImage original = new BufferedImage(150,300,BufferedImage.TYPE_INT_RGB);
    Graphics2D g = original.createGraphics();
    ImageIcon imgicon = new ImageIcon(original);
    JLabel label = new JLabel(imgicon);
    
    public Main() {
    g.setColor(Color.WHITE);
    g.fillRect(0,0,150,300);
    g.setColor(Color.BLACK);
    g.drawString("Hoi", 40, 40);
    add(label);
    label.addMouseListener(this);
    setSize(600,600);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setVisible(true);
    File outFile = new File("C:\\myImage.png");
    try {
        ImageIO.write( original , "png", outFile );
    } catch (IOException ex) {
        ex.printStackTrace();
    }
    
    }
    
    public static void main(String[] args) {
    new Main();
    }
    
    public void mouseClicked(MouseEvent e) {
    ImageIcon hoi2 = new ImageIcon(rotate(original));
    JLabel label2 = new JLabel(hoi2);
    
    label2.setBorder(BorderFactory.createEtchedBorder());
    remove(label);
    add(label2);
    validate();
    repaint();
    System.out.println("click?");
    }
    
    public void mousePressed(MouseEvent e) {
    }
    
    public void mouseReleased(MouseEvent e) {
    }
    
    public void mouseEntered(MouseEvent e) {
    }
    
    public void mouseExited(MouseEvent e) {
    }
    
    public BufferedImage rotate(BufferedImage victim) {

    AffineTransform tx = new AffineTransform();
    tx.rotate(Math.PI/2, victim.getWidth(), victim.getHeight());
    AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR);
    BufferedImage img2 = op.filter(victim, null);
img2 = img2.getSubimage(150, 150, 300, 150);
    
    File outFile = new File("C:\\myImage2.png");
    try {
        ImageIO.write( img2 , "png", outFile );
    } catch (IOException ex) {
        ex.printStackTrace();
    }
    return img2;
    
    }
}

They made me do it.