Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用AnimatedGifEncoder类创建的gif图像的部分帧是不透明的_Java_Gif_Transparent - Fatal编程技术网

Java 使用AnimatedGifEncoder类创建的gif图像的部分帧是不透明的

Java 使用AnimatedGifEncoder类创建的gif图像的部分帧是不透明的,java,gif,transparent,Java,Gif,Transparent,我已经陷入了一个问题很久了,那就是当我使用animatedgifcoder类来创建透明的GIF图像时,总是有一部分帧是不透明的。这是我的密码 AnimatedGifEncoder gifEncoder = new AnimatedGifEncoder(); gifEncoder.start("/Users/fengjiakang/Documents/result.gif"); gifEncoder.setRepeat(0); gifEncoder.setFrameR

我已经陷入了一个问题很久了,那就是当我使用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();
AnimatedGifEncoder gifEncoder=新的AnimatedGifEncoder();
gifEncoder.start(“/Users/fengjiakang/Documents/result.gif”);
gif.setRepeat(0);
设置帧率(800);
吉福编码器。设置质量(20);
gifEncoder.setTransparent(新颜色(250250250));
Graphics2D g2d=null;
BuffereImage bg=null;
BuffereImage parentPngImg=null;
BuffereImage childImg=null;
ExecutorService ExecutorService=Executors.newFixedThreadPool(13);
List futureResult=新阵列列表(13);
对于(int i=0;i
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;
}
public buffereImage调用()引发异常{
PicService PicService=new picserviceinpl();
BuffereImage childImg=null;
ImageLayer层=imageLayers.get(0);
BuffereImage bg=null;
试一试{
bg=ImageIO.read(新文件(pre+layer.getAsset_path().trim());
BuffereImage parentPngImg=新的BuffereImage(((双精度)(bg.getWidth()*imageLayers.get(0.getW())).intValue(),((双精度)(bg.getHeight()*imageLayers.get(0.getH()).intValue(),
BuffereImage.TYPE_INT_ARGB);
Graphics2D g2d=parentPngImg.createGraphics();
//为每个帧设置背景色,以便可以使用
//setTransparent()方法使帧透明。
g2d.setColor(新颜色(250250250));
g2d.fillRect(0,0,bg.getWidth(),bg.getHeight());
对于(int i=0;i
结果如下:

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


提前感谢

您正在使用gif库?此java gif库的作者是Kevin Weiner,写于2003年。