Я пытаюсь получить доступ к анимированному изображению GIF с 21 кадром, а затем прочитать 12-й (потому что он начинается с 0?) кадра.
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.IOFileFilter;
import org.apache.commons.io.filefilter.SuffixFileFilter;
import org.apache.commons.io.filefilter.TrueFileFilter;
public class PictureSearch {
public static void search(File file) {
try {
ImageReader reader = (ImageReader) ImageIO.getImageReadersBySuffix("gif").next();
reader.setInput(ImageIO.createImageInputStream(file), false);
BufferedImage caption = reader.read(12);
System.out.println(caption.getHeight());
System.out.println(caption.getWidth());
caption.flush();
} catch (IOException e) {
System.out.println(e);
}
}
public static void main(String[] args) throws IOException {
List<String> suffixes = new ArrayList<String>();
suffixes.add(".jpg");
suffixes.add(".gif");
suffixes.add(".bmp");
suffixes.add(".png");
Iterator<File> files = FileUtils.iterateFiles(new File(
"F:/test/"), (IOFileFilter) new SuffixFileFilter(
suffixes), TrueFileFilter.INSTANCE);
while (files.hasNext()) {
File file = (File) files.next();
PictureSearch.search(file);
}
}
}
Читатель должен вернуть мне буферизованное изображение высотой 220 и шириной 200 (или высотой 205 и шириной 188, если он игнорирует белые поля вокруг изображения). Но что он делает, так это возвращает мне изображение высотой 155 и шириной 174, что абсурдно, потому что я трижды проверял, а кадр 12 имеет высоту 220 и ширину 200. Все ли я правильно делаю при чтении кадров?
.gif
? Также может помочь sscce. - person trashgod   schedule 16.04.2011