Hallo liebes Forum,
ich habe zum Skalieren eines JPG-Bilds eine abstrakte Klasse JPanel zusammen mit einem JSlider wie folgt implementiert:
Die durch den JSlider veränderten Werte für die Bildhöhe und Bildweite lasse ich mir in einem Textfeld ausgeben. Ich möchte nun außerhalb der abstrakten Klasse das mit dem JSlider neu skalierte Originalbild als Kopie abspeichern. Ich könnte dafür natürlich die Werte für die Höhe und Breite aus dem Textfeld auslesen und als Parameter für getScaledInstance() verwenden. Hier nun meine Frage: Gibt es nicht eine bessere Methode, ohne den Umweg über ein Textfeld, um auf die durch den JSlider veränderten Werte für die Bildhöhe und -breite außerhalb der abstrakten Klasse zugreifen zu können?
ich habe zum Skalieren eines JPG-Bilds eine abstrakte Klasse JPanel zusammen mit einem JSlider wie folgt implementiert:
Java:
final JPanel p = new JPanel() {
protected void paintComponent(Graphics g) {
Dimension panelSize = getSize();
int panelWidth = panelSize.width;
int panelHeight = panelSize.height;
// Clear background and paint the image
g.setColor(Color.WHITE);
g.fillRect(0, 0, template.getWidth(null), template.getHeight(null));
int sliderWidth = (int) (bufferedImage.getWidth(null) * scaleFactor)/100;
int sliderHeight = (int) (bufferedImage.getHeight(null) * scaleFactor)/100;
int imageX = panelWidth/2 - sliderWidth/2;
int imageY = panelHeight/2 - sliderHeight/2;
g.drawImage(template, imageX, imageY, sliderWidth, sliderHeight, null);
Image image = new ImageIcon(template.getScaledInstance(sliderWidth, sliderHeight, Image.SCALE_SMOOTH)).getImage();
textLabel.setText(Integer.toString(scaleFactor) + ": " + Integer.toString(image.getWidth(null)) + " x " + Integer.toString(image.getHeight(null)));
this.add(textLabel);
}
};
final JSlider slider = new JSlider(0, 200);
slider.addChangeListener(new ChangeListener() {
public final void stateChanged(ChangeEvent e) {
scaleFactor = slider.getValue();
p.repaint();
}
});
JPanel panel = new JPanel();
panel.add(slider);
textLabel = new JLabel(Integer.toString(template.getWidth(null)) + " x " + Integer.toString(template.getHeight(null)));
getContentPane().add(p, BorderLayout.CENTER);
getContentPane().add(panel, BorderLayout.SOUTH);
setVisible(true);
Die durch den JSlider veränderten Werte für die Bildhöhe und Bildweite lasse ich mir in einem Textfeld ausgeben. Ich möchte nun außerhalb der abstrakten Klasse das mit dem JSlider neu skalierte Originalbild als Kopie abspeichern. Ich könnte dafür natürlich die Werte für die Höhe und Breite aus dem Textfeld auslesen und als Parameter für getScaledInstance() verwenden. Hier nun meine Frage: Gibt es nicht eine bessere Methode, ohne den Umweg über ein Textfeld, um auf die durch den JSlider veränderten Werte für die Bildhöhe und -breite außerhalb der abstrakten Klasse zugreifen zu können?