Javaのswingで画像を拡大縮小して表示するサンプルです。
ポイント
- ImageIconクラスでアイコンとして画像を読み込みます。
- getScaledInstanceで大きさを変更します。
- 幅と高さともに同じ倍率にする場合、高さは-1にしてもいいです。
- MediaTrackerで処理の終了を待ちます。
- 画像の加工は、加工完了する前に処理が戻ってくるので、waitForAll()などで処理の終了を待機する必要がある…らしいです。
- JLabelにアイコンを設定します。
大きさを変更するのも意外と簡単です。
実行結果
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Image;
import java.awt.MediaTracker;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JSeparator;
// swing 画像表示サンプル2 画像を拡大縮小してみよう
// ポイント1.ImageIconクラスでアイコンとして画像を読み込みます。
// ポイント2.getScaledInstanceで大きさを変更します。
// 幅と高さともに同じ倍率にする場合、高さは-1にしてもいいです。
//
// ポイント3.MediaTrackerで処理の終了を待ちます。
// 画像の加工は、加工完了する前に処理が戻ってくるので、waitForAll()などで処理の終了を待機する必要がある…らしいです。
// ポイント4.JLabelにアイコンを設定します。
// 大きさを変更するのも意外と簡単です。
public class ImageTest2 extends JFrame {
public static void main(String[] args) {
new ImageTest2();
}
public ImageTest2() {
setTitle("swing 画像表示サンプル2 画像を拡大縮小してみよう");
// 今回はレイアウトマネージャを使います
setLayout(new FlowLayout());
// ポイント1.ImageIconクラスでアイコンとして画像を読み込みます。
ImageIcon icon = new ImageIcon("logo3w.png");
MediaTracker tracker = new MediaTracker(this);
// ポイント2.getScaledInstanceで大きさを変更します。
Image smallImg = icon.getImage().getScaledInstance((int) (icon.getIconWidth() * 0.5), -1,
Image.SCALE_SMOOTH);
Image bigImg = icon.getImage().getScaledInstance((int) (icon.getIconWidth() * 1.5), -1,
Image.SCALE_SMOOTH);
// ポイント3.MediaTrackerで処理の終了を待ちます。
tracker.addImage(smallImg, 1);
tracker.addImage(bigImg, 2);
ImageIcon smallIcon = new ImageIcon(smallImg);
ImageIcon bigIcon = new ImageIcon(bigImg);
try {
tracker.waitForAll();
} catch (InterruptedException e) {
System.out.println("なんかエラーでた。");
}
// ポイント4.JLabelにアイコンを設定します。
JLabel l = new JLabel("0.5", smallIcon, JLabel.LEFT);
JLabel ll = new JLabel("1.0", icon, JLabel.LEFT);
JLabel lll = new JLabel("1.5", bigIcon, JLabel.LEFT);
// 関係ないポイント
// 横幅の大きなJseparatorを差し込むと、JFlowLayoutの強制改行みたいな事ができます
JSeparator sp = new JSeparator();
JSeparator sp2 = new JSeparator();
sp.setPreferredSize(new Dimension(5000, 0));
sp2.setPreferredSize(new Dimension(5000, 0));
add(l);
add(sp);
add(ll);
add(sp2);
add(lll);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setBounds(100, 100, 500, 350);
setVisible(true);
}
}
コメント(バグ、間違い、こんな情報が欲しい等ありましたら)
アンケート(このページの情報はお役に立ちましたか?)
最終更新:2024年09月20日 14:35