Hallo!
Nachdem mein erstes Problem bei der GUI-Entwicklung hier sehr schnell und kompetent gelöst wurde, tritt schon wieder ein sehr merkwürdiger Effekt auf, den ich nicht verstehe:
Nach dem Aufruf von g2.drawImage(sourceImg,0,0,400,400,x1,y1,x2,y2,null) erhalte ich kein quadratisches Bild, sondern das Bild ist in Y-Richtung mit Faktor 2 gestaucht. Da dieser Effekt absolut zuverlässig für alle Eingabewerte auftritt, behebt ein Korrekturfaktor 2 das Problem schon - allerdings ist das natürlich nicht das Mittel der Wahl.
Auch nach längerer Fehlersuche und etwas Recherche kann ich die Quelle für dieses merkwürdige Verhalten nicht ausfindig machen - wahrscheinich übersehe ich einfach etwas Offensichtliches. Für Hinweise wäre ich sehr dankbar!
Schonmal vielen Dank für's Lesen - nachfolgend der zugehörige Code und im Anhang ein Screenshot des Ergebnisses:
Nachdem mein erstes Problem bei der GUI-Entwicklung hier sehr schnell und kompetent gelöst wurde, tritt schon wieder ein sehr merkwürdiger Effekt auf, den ich nicht verstehe:
Nach dem Aufruf von g2.drawImage(sourceImg,0,0,400,400,x1,y1,x2,y2,null) erhalte ich kein quadratisches Bild, sondern das Bild ist in Y-Richtung mit Faktor 2 gestaucht. Da dieser Effekt absolut zuverlässig für alle Eingabewerte auftritt, behebt ein Korrekturfaktor 2 das Problem schon - allerdings ist das natürlich nicht das Mittel der Wahl.
Auch nach längerer Fehlersuche und etwas Recherche kann ich die Quelle für dieses merkwürdige Verhalten nicht ausfindig machen - wahrscheinich übersehe ich einfach etwas Offensichtliches. Für Hinweise wäre ich sehr dankbar!
Schonmal vielen Dank für's Lesen - nachfolgend der zugehörige Code und im Anhang ein Screenshot des Ergebnisses:
Java:
public class MyPanel extends JPanel{
BufferedImage buffImg;
Point upperLeft;
int width;
int height;
public MyPanel(){
super();
//load Image
File f = new File("images/test.jpg");
try {
buffImg = ImageIO.read(f);
} catch (IOException e) {
System.out.println("Datei konnte nicht geöffnet werden!");
}
// initial values
upperLeft = new Point(0,0);
width = buffImg.getWidth();
height = buffImg.getHeight();
repaint();
}
@Override
protected void paintComponent( Graphics g )
{
super.paintComponent(g);
int a = (int) upperLeft.getX();
int b = (int) upperLeft.getY();
int c = a+width;
int d = b+height;
Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g2.drawImage(buffImg,0,0,400,400,a,b,c,d, null);
}
}
public class Test {
public static void main(String[] args){
// frame
JFrame frame = new JFrame("test");
frame.setSize(1000, 1000);
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.setLayout( new FlowLayout() );
//picPanel
MyPanel picPanel = new MyPanel();
picPanel.setPreferredSize(new Dimension(400,400));
picPanel.setBorder(BorderFactory.createTitledBorder("picPanel"));
//picBorderPanel
JPanel picBorderPanel = new JPanel ();
picBorderPanel.setPreferredSize(new Dimension(500,500));
picBorderPanel.setBorder(BorderFactory.createTitledBorder("picBorderPanel"));
picBorderPanel.add(picPanel);
//buttonPanel
JPanel buttonPanel = new JPanel();
buttonPanel.setPreferredSize(new Dimension(500,500));
buttonPanel.setBorder(BorderFactory.createTitledBorder("buttonPanel"));
// adding components to top level container
Container contentPane = frame.getContentPane();
contentPane.add(picBorderPanel);
contentPane.add(buttonPanel);
// set visible
frame.pack();
frame.setVisible(true);
}
}