【发布时间】:2016-08-17 06:30:05
【问题描述】:
我正在尝试读取图像,将其放大到 80*60,然后通过复制方法使其大小重复。我的方法单独运行良好,但是当我在 main 方法中调用它们时,我的图像变黑了。任何人都可以帮助我吗? 这是我的代码:
import java.awt.BorderLayout;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
BufferedImage Image = null;
File fc = null;
try{
fc = new File("C:\\1.jpg");
Image = ImageIO.read(fc);
BufferedImage zoomin = new BufferedImage(ScaledImage(Image,80,60).getWidth(null),ScaledImage(Image,80,60).getWidth(null), BufferedImage.TYPE_BYTE_GRAY);
JFrame frame = new JFrame("Scaled Resolution");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JLabel lbl = new JLabel();
lbl.setIcon(new ImageIcon(ImgReplication(zoomin,2)));
frame.getContentPane().add(lbl, BorderLayout.CENTER);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
catch (Exception e1){
System.out.println(e1);
}
}
public static BufferedImage ImgReplication(BufferedImage image, int n) {
int w = n * image.getWidth();
int h = n * image.getHeight();
BufferedImage enlargedImage =
new BufferedImage(w, h, image.getType());
for (int y=0; y < h; ++y)
for (int x=0; x < w; ++x)
enlargedImage.setRGB(x, y, image.getRGB(x/n, y/n));
return enlargedImage;
}
public static BufferedImage ScaledImage(Image img, int w , int h){
BufferedImage resizedImage = new BufferedImage(w , h , BufferedImage.TYPE_BYTE_GRAY);
Graphics2D g2 = resizedImage.createGraphics();
g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g2.drawImage(img, 0, 0, w, h, null);
g2.dispose();
return resizedImage;
}
}
【问题讨论】:
-
您是否考虑了 Alpha 通道?
-
单独使用效果好吗?你在哪里绘制图像并且效果很好?
-
我应该阅读的图像是灰度 BYTE。我没有 alpha。
-
是的,每种方法在我正在开发的另一个程序中单独工作。我的意思是我可以使用 ScaledImage() 将图像调整到我想要的比例,我可以通过 ImgReplication 方法放大我的图像。但是,当我尝试在我的主要方法中调用它们时,我得到的图像是黑色的。问题来自这一行:BufferedImage zoomin = new BufferedImage(ScaledImage(Image,80,60).getWidth(null),ScaledImage(Image,80,60).getWidth(null), BufferedImage.TYPE_BYTE_GRAY);
-
重点是我不想向用户显示 scaledImage 或将其保存在某处。我只是想显示放大的图像,以显示使用复制方法缩放图片的分辨率将如何变化。
标签: java swing image-processing replication bufferedimage