java缓冲图像导致空白图像

java缓冲图像导致空白图像,java,bufferedimage,Java,Bufferedimage,我试图从gif中提取所有帧,并将它们放在一列中,下一帧在最后一帧下。因此,一个人只需向下滚动一幅高高的图像,就能看到gif。我可以提取所有的帧,但当我试图写出来,我得到的只是一个黑色的画布。宽度和高度都是正确的,它说它能正确地阅读图像。这里怎么了 String img = "test.gif"; //original gif String[] temp = img.split(".gif"); String base = temp[0]; try {

我试图从gif中提取所有帧,并将它们放在一列中,下一帧在最后一帧下。因此,一个人只需向下滚动一幅高高的图像,就能看到gif。我可以提取所有的帧,但当我试图写出来,我得到的只是一个黑色的画布。宽度和高度都是正确的,它说它能正确地阅读图像。这里怎么了

    String img = "test.gif"; //original gif
    String[] temp = img.split(".gif");
    String base = temp[0];

    try {
        ImageReader reader = ImageIO.getImageReadersBySuffix("GIF").next();
        ImageInputStream in = ImageIO.createImageInputStream(new File(img));
        reader.setInput(in);

        int rows = reader.getNumImages(true);  // How many images there will be 
        int cols = 1;
        int chunks = rows;
        int chunkWidth, chunkHeight;
        int type;

        type = reader.read(0).getType(); //Get single frame file type
        chunkWidth = reader.read(0).getWidth(); //Get single frame width
        chunkHeight = reader.read(0).getHeight();  //Get single frame height

        //Initializing the final image
        BufferedImage finalImg = new BufferedImage(chunkWidth, chunkHeight * rows, type);

        for (int i = 0, count = reader.getNumImages(true); i < count; i++) {
            BufferedImage image = reader.read(i); //read next frame from gif
            finalImg.createGraphics().drawImage(image, chunkWidth, chunkHeight * i, null); //append new image to new file
        }

        System.out.println("Image concatenated.....");
        ImageIO.write(finalImg, "png", new File("finalImg1234555.png")); //final png with all gif images in it

    } catch (IOException ex) {
        Logger.getLogger(Gifextract.class.getName()).log(Level.SEVERE, null, ex);
    }
String img=“test.gif”//原始gif
字符串[]temp=img.split(“.gif”);
字符串基=temp[0];
试一试{
ImageReader=ImageIO.getImageReadersBySuffix(“GIF”).next();
ImageInputStream in=ImageIO.createImageInputStream(新文件(img));
reader.setInput(in);
int rows=reader.getNumImages(true);//将有多少个图像
int cols=1;
int chunks=行;
int chunkWidth,chunkHeight;
int型;
type=reader.read(0).getType();//获取单帧文件类型
chunkWidth=reader.read(0).getWidth();//获取单帧宽度
chunkHeight=reader.read(0).getHeight();//获取单帧高度
//初始化最终图像
BuffereImage finalImg=新的BuffereImage(chunkWidth,chunkHeight*行,类型);
for(inti=0,count=reader.getNumImages(true);i
finalImg.createGraphics().drawImage(图像,chunkWidth,chunkHeight*i,null)

x坐标是
chunkWidth
,这意味着图像的左边缘从
chunkWidth
开始。由于
finalImg
的宽度仅为
chunkWidth
,因此您的绘图完全超出了
finalImg
的范围。我怀疑x坐标应该是
0