2

我想用Java制作简单的相册。为此,我认为这将是使用网格布局协调图片的最简单方法。

我有我的图片的缓冲图像,我正在尝试使用以下代码将它们添加到网格布局中,

    BufferedImage a = GUI.createImage(current);
    Image b = Toolkit.getDefaultToolkit().createImage(a.getSource());

    Icon pic = new ImageIcon(b);        
    JButton picB = new JButton("Picture 1", pic );
    selectB.setVerticalTextPosition(AbstractButton.BOTTOM);
    selectB.setHorizontalTextPosition(AbstractButton.CENTER); //aka LEFT, for left-to-right locales
    add(picB);

我还尝试使用以下代码缩小我的缓冲图像,

int w = a.getWidth();
    int h = a.getHeight();
    BufferedImage after = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
    AffineTransform at = new AffineTransform();
    at.scale(0.6, 0.6);
    AffineTransformOp scaleOp = new AffineTransformOp(at, AffineTransformOp.TYPE_BILINEAR);
    after = scaleOp.filter(a, after);

但是,即使我将图片的尺寸最小化,按钮也比图片大,而且我无法组织图片。

您有什么建议或新的解决方案吗?

谢谢。

4

2 回答 2

1
picB.setInsets(new Insets(1, 1, 1, 1));

BufferedImage 也是图像,因此b似乎不需要。

BufferedImage 具有关联的 Graphics,因此可以按如下方式调整大小:

BufferedImage scaled = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
scaled.getGraphics().drawImage(original, 0, 0, width, height, null);
于 2012-01-01T20:55:18.953 回答
1

感谢您的回答,我也处理了以下情况;

我没有使用缩放,而是创建了一个名为 resize 的新函数

public static BufferedImage resize(BufferedImage img, int newW, int newH) {
    int w = img.getWidth();
    int h = img.getHeight();
    BufferedImage dimg = dimg = new BufferedImage(newW, newH, img.getType());
    Graphics2D g = dimg.createGraphics();
    g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
    g.drawImage(img, 0, 0, newW, newH, 0, 0, w, h, null);
    g.dispose();
    return dimg;
}

然后对我的名为 bf 的缓冲图像,我调用了 resize func 并将其转换为图标

bf = resize(bf, bf.getWidth()/3, bf.getHeight()/3);
Image im = Toolkit.getDefaultToolkit().createImage(bf.getSource());
Icon ic = new ImageIcon(im);

然后我添加了带有图像的按钮,

JButton bt = new JButton("Picture", ic);
bt.setVerticalTextPosition(AbstractButton.BOTTOM);
bt.setHorizontalTextPosition(AbstractButton.CENTER);
add(bt);
于 2012-01-02T13:16:57.810 回答