Я пытаюсь создать BufferedImage из произвольного файла изображения, а затем отцентрировать это изображение на фоне JPanel.У меня нет проблем с квадратными изображениями, но я не могу понять, как обрабатывать неквадратные изображения.
Некоторые отладки указывают, что (непосредственная) проблема заключается в том, что когда я использую ImageIO для созданияBufferedImage из прямоугольного входного файла, скажем, 256x128, BufferedImage.getHeight () возвращает 256, а не 128.
Вот фрагмент кода, приближающий мой код:
class ExtendedPanel extends JPanel {
static final int WIDTH = 400;
static final int HEIGHT = 400;
BufferedImage image;
public ExtendedPanel(File f) {
super();
setPreferredSize(new Dimension(WIDTH,HEIGHT));
image = ImageIO.read(f);
}
@Override
public void paintComponent(Graphics g) {
int x = (WIDTH - image.getWidth())/2;
int y = (HEIGHT - image.getHeight())/2;
Graphics2D g2d = (Graphics2d)g;
g2d.drawRenderedImage(image,AffineTransform.getTranslateInstance(x,y));
}
}
Как я уже сказал, этохорошо для квадратных файлов изображений.Но с прямоугольными изображениями, которые шире, чем они высокие, изображение отображается выше, чем должно быть.Я еще не пробовал с изображениями выше, чем они широкие, но я боюсь, что в этом случае изображение будет отображаться слишком далеко влево.Что я могу сделать?