我创建了一个SWING组件JImageEditor,它只是显示图片。这个想法是在更进一步的道路上向组件添加更多功能。Swing:在图像组件中实现缩放功能的最佳方式
我已经实现的一个功能是缩放。现在,这部分是在paintComponent()方法中处理的。然而,不知何故,我怀疑这可能是一个坏主意,因为这意味着每次调用paintComponent()时,图像都将从原始大小缩放到当前的“缩放大小”。该代码的paintComponent云如下:
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BICUBIC);
int w = getWidth();
int h = getHeight();
double imageWidth = scale * image.getWidth();
double imageHeight = scale * image.getHeight();
double x = (w - imageWidth)/2;
double y = (h - imageHeight)/2;
AffineTransform at = AffineTransform.getTranslateInstance(x, y);
at.scale(scale, scale);
g2.drawRenderedImage(image, at);
}
现在,我虽然作为替代是保持BufferedImage的两个实例,其中一个是原来的,一个是当前的“视图”。这样我就可以在调用setScale()方法时处理实际的缩放/缩放,而不是在paintComponent()中缩放。然而,缺点是我需要保留BufferedImage的两个实例,这将导致更高的内存消耗,具体取决于图像大小。当然,不可能预测任何给定用户将使用该组件打开多大的图像。
我正在寻找的是如果我在正确的轨道上与我的工作或拇指向下竖起大拇指如果这是不好的设计和其他解决方案应该考虑。我欣赏所有的输入,并将奖励所有启发我的答案:-)
+1模型视图分离。 – trashgod