我創建了一個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