1 回答

TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超4個(gè)贊
GifSequenceWriter
使用調(diào)色板圖像(BufferedImage.TYPE_BYTE_INDEXED
時(shí)IndexColorModel
)存在的問題。這將基于默認(rèn)的216調(diào)色板(網(wǎng)絡(luò)安全調(diào)色板)創(chuàng)建元數(shù)據(jù),該調(diào)色板與圖像中的顏色明顯不同。
有問題的行GifSequenceWriter
:
ImageTypeSpecifier imageTypeSpecifier = ImageTypeSpecifier.createFromBufferedImageType(imageType); imageMetaData = gifWriter.getDefaultImageMetadata(imageTypeSpecifier, imageWriteParam);
而是,元數(shù)據(jù)應(yīng)基于圖像索引顏色模型中的調(diào)色板。但是,好消息是,沒有它,它會(huì)很好地工作。
您可以簡(jiǎn)單地使用:
GifSequenceWriter writer = new GifSequenceWriter(output, BufferedImage.TYPE_INT_ARGB, delayTimeMS, true);
...作者將根據(jù)您的實(shí)際圖像數(shù)據(jù)自動(dòng)創(chuàng)建調(diào)色板。
也可以修復(fù)GifSequenceWriter,以接受ImageTypeSpecifier而不是int imageType,但是,這僅在所有框架都使用相同的調(diào)色板時(shí)才有效,我認(rèn)為:
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);
添加回答
舉報(bào)