我想用Java制作简单的相册。要做到这一点,我认为这将是使用gridlayout协调图片的最简单方法。
我有我的照片'bufferedimages,我正在尝试使用以下代码将它们添加到gridlayout中,
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);
我也试图使用以下代码缩小我的bufferedimage,
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);
然而,eventhoug我最小化图片的大小,按钮大于图片,我无法组织图片。
您有任何建议或新解决方案吗?
感谢。
答案 0 :(得分:1)
picB.setInsets(new Insets(1, 1, 1, 1));
BufferedImage也是一个Image,因此似乎不需要b
。
BufferedImage有一个关联的图形,因此可以按如下方式进行调整:
BufferedImage scaled = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
scaled.getGraphics().drawImage(original, 0, 0, width, height, null);
答案 1 :(得分:1)
感谢您的回答,我也处理了以下情况;
我没有使用scale,而是创建了一个名为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的bufferedimage,我调用了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);