Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ImageIO.read和paintComponents()的JAVA_Java_Javax.imageio - Fatal编程技术网

使用ImageIO.read和paintComponents()的JAVA

使用ImageIO.read和paintComponents()的JAVA,java,javax.imageio,Java,Javax.imageio,我编写了一个类,它帮助我从一个大的类中获取32x32个图像。但我有个问题。我的班级是这样的: package tool; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; public class ImageLoader { private String file; private Buffer

我编写了一个类,它帮助我从一个大的类中获取32x32个图像。但我有个问题。我的班级是这样的:

package tool;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

public class ImageLoader {

    private String file;
    private BufferedImage image;
    private BufferedImage[][] subImage;

    public ImageLoader(String FILE) {
        file = FILE;
        try {
            image = ImageIO.read(new File(file));
        } catch (IOException e) {
        }

        subImage = new BufferedImage[image.getWidth() / 32][image.getHeight() / 32];
        for (int i = 0; i < image.getWidth() / 32; i++) {
            for (int j = 0; j < image.getHeight() / 32; j++) {
                subImage[i][j] = image.getSubimage(i * 32, j * 32, (1 + i) * 32, (1 + j) * 32);
            }
        }
    }

    public BufferedImage getSubImage(int X, int Y) {
        return subImage[X][Y];
    }
}
打包工具;
导入java.awt.image.buffereImage;
导入java.io.File;
导入java.io.IOException;
导入javax.imageio.imageio;
公共类图像加载器{
私有字符串文件;
私有缓冲图像;
私有缓冲区映像[][]子映像;
公共图像加载器(字符串文件){
文件=文件;
试一试{
image=ImageIO.read(新文件(File));
}捕获(IOE异常){
}
subImage=new BufferedImage[image.getWidth()/32][image.getHeight()/32];
对于(int i=0;i
如果我这样做的话,
ImageIO.read(新文件(字符串文件))
命令似乎会阻止使用我想要绘制图像的Swing对象的
paintComponent()
。我做了一点实验,发现当您在
getSubImage(intx,inty)
方法中加载图像时,效果很好。但我认为,这不是最聪明的想法,因为如果调用该方法,您总是再次加载此图像。我需要帮助,如何只加载一次图像,如何让Swing对象正确绘制所有内容


提前感谢。

将缩略图写入并加载回JLabel中

//get the large file and create a new 32x32 thumbnail 
BufferedImage sourceImage = ImageIO.read(new FileInputStream("c://filename"));
Image thumbnail = sourceImage.getScaledInstance(32, 32, Image.SCALE_SMOOTH);
BufferedImage bufferedThumbnail = new BufferedImage(thumbnail.getWidth(null),
                                                thumbnail.getHeight(null),
                                                BufferedImage.TYPE_INT_RGB); 
bufferedThumbnail.getGraphics().drawImage(thumbnail, 0, 0, null);
//read the file back
ImageIO.write(bufferedThumbnail, "jpeg", outputStream);


//read the file back  
image = ImageIO.read(new File(path));
JLabel picLabel = new JLabel(new ImageIcon(image));
ImageIO.read(文件)
如何防止使用
paintComponent()
?代码中没有Swing组件。。。?