有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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;
}

结果如下:
the result gif

有人能帮我解决这个问题吗

提前谢谢


共 (0) 个答案