単純に画像を表示する SWING コンポーネント JImageEditor を作成しました。アイデアは、さらに先のコンポーネントに機能を追加することです。
私がすでに実装した機能の 1 つはズームです。現在、この部分は 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 の 2 つのインスタンスを保持することでした。1 つはオリジナルで、もう 1 つは現在の「ビュー」です。そうすれば、paintComponent() でスケーリングする代わりに、setScale() メソッドが呼び出されるたびに実際のズーム/スケーリングを処理できます。ただし、欠点は、BufferedImage の 2 つのインスタンスを保持する必要があることです。これにより、画像サイズに応じてメモリ消費量が増加します。もちろん、特定のユーザーがこのコンポーネントを使用して開く画像のサイズを予測することは不可能です。
私が探しているのは、自分の仕事が正しい方向に進んでいる場合は親指を立てること、または設計が悪く、他の解決策を検討する必要がある場合は親指を立てることです。私はすべての入力に感謝し、私を啓発するすべての回答に報います:-)