java使用AnimatedGifEncoder类创建的gif图像的部分帧是不透明的
我已经陷入了一个问题很久了,那就是当我使用animatedgifcoder类来创建透明的GIF图像时,总是有一部分帧是不透明的。这是我的密码
AnimatedGifEncoder gifEncoder = new AnimatedGifEncoder();
gifEncoder.start("/Users/fengjiakang/Documents/result.gif");
gifEncoder.setRepeat(0);
gifEncoder.setFrameRate(800);
gifEncoder.setQuality(20);
gifEncoder.setTransparent(new Color(250, 250, 250));
Graphics2D g2d = null;
BufferedImage bg = null;
BufferedImage parentPngImg = null;
BufferedImage childImg = null;
ExecutorService executorService = Executors.newFixedThreadPool(13);
List<Future<BufferedImage>> futureResult = new ArrayList<Future<BufferedImage>>(13);
for (int i = 0; i < imageFrames.size(); i++) {
futureResult.add(executorService.submit(new MyCallable(imageFrames.get(i).getLayers(), imageFrames.get(i).getIdx())));
}
executorService.shutdown();
for (Future<BufferedImage> returnFrame : futureResult) {
BufferedImage bufferedImage = returnFrame.get();
gifEncoder.addFrame(bufferedImage);
}
gifEncoder.finish();
MyCallable代码是:
public BufferedImage call() throws Exception {
PicService picService = new PicServiceImpl();
BufferedImage childImg = null;
ImageLayer layer = imageLayers.get(0);
BufferedImage bg = null;
try {
bg = ImageIO.read(new File(pre + layer.getAsset_path().trim()));
BufferedImage parentPngImg = new BufferedImage(((Double) (bg.getWidth() * imageLayers.get(0).getW())).intValue(), ((Double) (bg.getHeight() * imageLayers.get(0).getH())).intValue(),
BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = parentPngImg.createGraphics();
//set a background color for each frame so that can use
//setTransparent() method to make frame transparent.
g2d.setColor(new Color(250, 250, 250));
g2d.fillRect(0, 0, bg.getWidth(), bg.getHeight());
for (int i = 0; i < imageLayers.size(); i++) {
childImg = ImageIO.read(new File(pre + imageLayers.get(i).getAsset_path().trim()));
picService.overlapImage(childImg, parentPngImg, imageLayers.get(i).getCx(), imageLayers.get(i).getCy(),
imageLayers.get(i).getW(), imageLayers.get(i).getH(), imageLayers.get(i).getR());
}
return parentPngImg;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
结果如下:
有人能帮我解决这个问题吗
提前谢谢
共 (0) 个答案