Java ImageWriter BufferedImage 到 GIF

2024-04-18

我希望你们能帮我解决这个问题。我不确定这是 Java 中的错误还是我做错了什么,但我会选择后者。

我想将 BufferedImage 转换为 GIF 图像。然后我希望将 GIF 以字节数组的形式保存在内存中。 (我不想将文件保存到磁盘)

该程序应该捕获一个屏幕片段(只是为了创建一个快速图像)并使用 ImageIO ImageWriter 和 ByteArrayOutputStream 将其转换为 GIF 字节数组。

下面的代码将向您展示该错误。程序将崩溃并给出 ArrayIndexOutOfBoundsException 并且数组仍为空。如果你用“png”替换“gif”,它会工作得很好,因此我很困惑。还!如果我将图像保存到磁盘上的文件中

write.setOutput(ImageIO.createImageOutputStream(new FileOutputStream(new File("C:/Image.gif")));

它会正确地将其保存到 .gif 文件。

所以我的问题是,我在这段代码中做错了什么?任何帮助将不胜感激! :)

注意:这不是 GIF 动画,也不涉及透明度。

    String format = "gif";
    Robot r = null;
    try {
        r = new Robot();
    } catch (AWTException e1) {
        e1.printStackTrace();
    }
    BufferedImage screen = r.createScreenCapture(new Rectangle(512,512));
    final BufferedImage gif = new BufferedImage(512,512,BufferedImage.TYPE_BYTE_INDEXED);
    Graphics2D g = gif.createGraphics();
    g.drawImage(screen,0,0,null);
    g.dispose();
    ImageWriter write = ImageIO.getImageWritersBySuffix(format).next();
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    try {
        write.setOutput(ImageIO.createImageOutputStream(out));
        write.write(gif);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    for(int i=0; i < 10; i++) {
        System.out.println(out.toByteArray()[i]);
    }

似乎有一些奇怪的(如果不是明显有问题的)流缓冲实现com.sun.imageio.plugins.gif.*。如果您不显式刷新或关闭 ImageOutputStream,则内容不会被刷新,即使在关闭底层流之后. Change

 write.setOutput(ImageIO.createImageOutputStream(out));
 write.write(gif);

to

   ImageOutputStream imageos = ImageIO.createImageOutputStream(out);
   write.setOutput(imageos);
   write.write(gif);
   imageos.close();  // or imageos.flush();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java ImageWriter BufferedImage 到 GIF 的相关文章

随机推荐

  • wagtail 中的嵌套类别/InlinePanel

    我很难实现 嵌套类别 之类的东西 PageA Cat1 SubCat1 SubCat2 Cat2 SubCat1 所有类别和子类别都应可由编辑排序和编辑 我的猜测是这样的 class CategoryTestPage Page conten
  • lucene:如何添加不重复的文档

    就我而言 插入 lucene 索引的每个文档都有其唯一的 ID 当向lucene索引添加新文档时 如果该文档已经存在于索引中 则不应将该文档插入到索引中 如何实施这一战略 我想我应该先用docId搜索文档 如果lucene找不到该文档 那么
  • 如何在 Android 上对 XML 进行编码?

    我需要将 XML 文档编码为一种格式 该格式将作为字符串 即条带标签 通过 XML 解析器 然后我需要再次解码它 并且我需要在 Android 上执行此操作 我正在寻找的 Android API 中的库 类是什么 Thanks XmlSer
  • 运行我的应用程序时,Java 运行时环境检测到致命错误

    我在运行程序时遇到以下错误 并且无法弄清楚解决方案是什么我还查看了具有类似错误的所有主题 但无法解决我的问题 这里的错误 我的应用程序是基于 Groovy 和 Grails 版本 2 0 4 构建的 A fatal error has be
  • 使用 bash 通过 ssh 启动进程,然后在 sigint 上终止它

    我想使用 ssh 在不同的机器上启动几个作业 如果用户随后中断主脚本 我想优雅地关闭所有作业 这是我正在尝试做的事情的一个简短示例 bin bash trap aborted SIGINT SIGTERM aborted kill SIGT
  • 每个键的填充数据帧和累积度量 Pandas

    我有以下数据框 import pandas as pd before padding pd DataFrame data user id 1 1 1 1 2 2 3 days past 1 2 3 4 2 3 2 pay 11 12 13
  • tesseract (v3.03) 输出为 PDF [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 为什么会返回这个错误呢 root amd 3700 2gb ocr test tesseract l dan pdf png out pd
  • 无法加载动态库'C:\php\ext\php_pthreads.dll'

    我试图在我的 php 代码中添加线程 但我无法理解pthreads库 每次运行程序时都会遇到此错误 Warning PHP Startup Unable to load dynamic library C php ext php pthre
  • 通过多种方法进行 Spring JPA 事务

    我在 Tomcat 7 中运行的 Web 应用程序中使用带有 JPA 和 Hibernate 4 的 Spring 3 2 该应用程序分为控制器 服务和 DAO 类 服务类在类和方法级别具有带注释的事务配置 DAO 是普通的 JPA 带有通
  • Java 堆被无法访问的对象淹没

    我们的 Java EE 应用程序开始出现一些严重问题 具体来说 应用程序在启动后几分钟内就运行了高达 99 的老年代堆 不会抛出 OOM 但实际上 JVM 没有响应 jstat 显示老年代的大小根本没有减少 没有垃圾收集正在进行 并且kil
  • 防止 TWIG 删除变量前的空格

    我有这个用例 范围内的默认文本 将在整个页面中使用 使用 jQuery 将文本从 占位符 更改为 特定情况 Ie 在 html 中我想这样做 树枝 html 和 js block content set location span Some
  • MassTransit 是否支持基于 HTTP 传输的 MSMQ?

    HTTP 传输自 MSMQ 3 0 起就可用 但恐怕 MassTransit 不提供使用 HTTP 协议作为队列之间的传输协议的功能 关于这个有一个非常相似的问题here https stackoverflow com questions
  • 同时从多个应用程序访问网络摄像头

    问题背景 有两个不同的 Windows 应用程序正在尝试同时访问计算机上的网络摄像头 目前 只有一个应用程序能够访问它 我希望能够允许两个应用程序同时访问网络摄像头 我的问题的一个常见示例是 Skype 和 yahoo Messenger
  • 浏览器对 SVG SMIL(动画)的支持级别

    有谁知道流行浏览器中 SVG SMIL 动画支持的当前状态 看起来 Safari Chrome 和 Opera 都支持它 Firefox 在其开发页面中有关于已添加 SMIL 支持的令人困惑的报告 但我在 v3 6 中没有看到它 https
  • Java Comparator.comparing 不比较?

    下列的这个问题 https stackoverflow com questions 18129807 in java how do you sort one list based on another关于按另一个列表对列表进行排序 我尝试做
  • 删除列表内数据框中的列

    我根据 A 列中的因子水平 从数据框中创建了一个列表 在列表中 我想删除该列 我的脑子里在说 lapply 但没有别的意思 P A ID Test A 1 A 1 B ID Test B 1 B 3 B 5 进入这个 A Test 1 1
  • 由 VBA 关闭的工作簿未关闭引用的 IsAddin 工作簿

    Version Excel 2016 桌面版 Context VBA 项目 客户端 xlsb 具有对另一个工作簿的引用 工具 菜单 gt 引用 参考书目isn t一个插件 它是一个普通的 xlsb 文件 这会导致如果客户书籍仍处于打开状态
  • Scala 中对象的 Mockito

    我正在使用 Scala 2 10 specs2 和 Mockito 我想模拟 scala io Source fromURL 问题似乎是 fromURL 是一个函数io Source 的对象 http www scala lang org
  • C++:错误:“类”没有命名的成员

    对于我的毕业论文 我正在编写一些有限元代码 或者更准确地说 我正在修改现有程序 该程序基于我的教师提供的 2 类库 因此 我无法修改这些类 因为它们是通用的 我创建了一个类BurgersMSrc 它继承自父类ValSrc 我用一种方法扩展了
  • Java ImageWriter BufferedImage 到 GIF

    我希望你们能帮我解决这个问题 我不确定这是 Java 中的错误还是我做错了什么 但我会选择后者 我想将 BufferedImage 转换为 GIF 图像 然后我希望将 GIF 以字节数组的形式保存在内存中 我不想将文件保存到磁盘 该程序应该