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:
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.