1 回答
TA贡献1785条经验 获得超4个赞
GifSequenceWriter
使用调色板图像(BufferedImage.TYPE_BYTE_INDEXED
时IndexColorModel
)存在的问题。这将基于默认的216调色板(网络安全调色板)创建元数据,该调色板与图像中的颜色明显不同。
有问题的行GifSequenceWriter
:
ImageTypeSpecifier imageTypeSpecifier = ImageTypeSpecifier.createFromBufferedImageType(imageType); imageMetaData = gifWriter.getDefaultImageMetadata(imageTypeSpecifier, imageWriteParam);
而是,元数据应基于图像索引颜色模型中的调色板。但是,好消息是,没有它,它会很好地工作。
您可以简单地使用:
GifSequenceWriter writer = new GifSequenceWriter(output, BufferedImage.TYPE_INT_ARGB, delayTimeMS, true);
...作者将根据您的实际图像数据自动创建调色板。
也可以修复GifSequenceWriter,以接受ImageTypeSpecifier而不是int imageType,但是,这仅在所有框架都使用相同的调色板时才有效,我认为:
public GifSequenceWriter(
ImageOutputStream outputStream,
ImageTypeSpecifier imageTypeSpecifier,
int timeBetweenFramesMS,
boolean loopContinuously) throws IIOException, IOException {
// my method to create a writer
gifWriter = getWriter();
imageWriteParam = gifWriter.getDefaultWriteParam();
imageMetaData = gifWriter.getDefaultImageMetadata(imageTypeSpecifier, imageWriteParam);
// ... rest of the method unchanged.
用法:
ColorModel cm = firstImage.getColorModel();
ImageTypeSpecifier imageType = new ImageTypeSpecifier(cm, cm.createCompatibleSampleModel(1, 1));
GifSequenceWriter writer = new GifSequenceWriter(output, imageType, delayTimeMS, true);
添加回答
举报