如何将 16 位灰度图像写入 jpeg?

2023-12-28

我有每像素 16 位灰度BufferedImage由一系列短裤创建:

 private BufferedImage get16bitImage(short[] pixels) {
    ColorModel colorModel = new ComponentColorModel(
            ColorSpace.getInstance(ColorSpace.CS_GRAY),
            new int[]{16},
            false,
            false,
            Transparency.OPAQUE,
            DataBuffer.TYPE_USHORT);
    DataBufferUShort db = new DataBufferUShort(pixels, pixels.length);
    WritableRaster raster = Raster.createInterleavedRaster(
            db,
            imgD.width,
            imgD.height,
            imgD.width,
            1,
            new int[1],
            null);
    return new BufferedImage(colorModel, raster, false, null);
}

当尝试保存它时:

  ImageIO.write(img, "PNG", new File(resultImgNamePNG)); // works fine
  ImageIO.write(img, "BMP", new File(resultImgNameBMP)); // doesn't work, returns false
  ImageIO.write(img, "JPEG", new File(resultImgNameJPEG)); // doesnt work, returns false

我尝试使用 JAI:

public void writeImageToJPEG(File out, BufferedImage image, float quality) throws IOException {
    JPEGEncodeParam param = new JPEGEncodeParam();
    param.setQuality(quality);
    ImageEncoder encoder = ImageCodec.createImageEncoder("JPEG", new FileOutputStream(out), param);

    encoder.encode(image);
}

encoder.encode(image) throws java.lang.RuntimeException:只能写入 1 或 3 段字节数据。


我认为你必须先将其转换为8位。如果这是用于显示目的,java无论如何都会在显示之前将其转换为8位。

您可以做一些我有时看到的事情,实际上可以改善显示的图像,即对值进行非线性缩放(例如使用对数刻度),这样的细节当然取决于您生成的图像。

有关此类效果的更多信息,请参见此处:http://www.java.net/external?url=http://www.cs.unm.edu/~brayer/vision/perception.html http://www.java.net/external?url=http://www.cs.unm.edu/~brayer/vision/perception.html

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

如何将 16 位灰度图像写入 jpeg? 的相关文章

随机推荐

  • 如何从 JSP 访问 JavaScript 中的 Java 对象 [重复]

    这个问题在这里已经有答案了 我在 JSP 中有一个下拉框 列出了一个 Java 对象 通过 MVC 控制器的 addAttribute 访问该对象 现在 从下拉框中选择一个选项时 我想在 div 中显示所选员工的其他详细信息 例如 empl
  • Spring数据Redis HGETALL操作

    我在用Redis作为我的 Spring Web 应用程序的数据存储并使用Spring Data Redis作为我的客户与之互动Redis 我在用HashMap存储一个具有多个字段的对象 我可以将所有字段放入Redis立即使用DefaultR
  • iPhone 中可扩展的 tableView

    我想做这种类型的可展开 可折叠表视图 如图所示 有类别和子类别 例如 健康与美丽 是一个类别 当我单击此单元格时 它会打开子类别 如下图所示 那么如何制作这种类型的表格视图呢 请建议我 最后 我在下面得到了两个非常有用的帮助链接 其中准确描
  • 即使添加 SSH 密钥后,Github 上的身份验证仍失败

    当我尝试将代码推送到我的存储库时 我收到 fatal Authentication Failure 我也在我的 github 帐户上添加了公钥 当我做 ssh i email protected cdn cgi l email protec
  • Firebase 托管 - 功能重写定价

    如果你使用Firebase 托管将请求定向到云功能通过重写 通过 托管的请求流量是否会计入 Firebase 托管GB 已转移 忽略云功能的计费 换句话说 Do Firebase 托管当请求到来时 函数重写本身要花钱吗 需要明确的是 明显地
  • HTTP 标头中缺少 Spring WebServiceTemplate SOAPAction

    我在通过 Spring ws WebServiceTemplate 调用 SOAP 1 2 WebService 时遇到困难 发出的请求在 Http 标头中缺少 SOAPAction 并且服务器抛出错误 无法处理没有有效操作参数的请求 请提
  • 添加 2 个时间值的混乱

    基本上这一切都让我感到沮丧 我是编程新手 所以如果我问了一个愚蠢的问题 我深表歉意 我的数据库中存储了一个 MySQL time 我想将此时间添加到当前时间以建立目标时间 持续时间为 06 00 00 MySQL时间 length strt
  • laravel中的双冒号是什么意思

    例子 Auth guard guard gt guest 我不明白双冒号 表示法在 Laravel 框架中的含义 从http php net manual en language oop5 paamayim nekudotayim php
  • EditText setError 在 PopupWindow 中不起作用

    I had popup window具有自定义布局edittext 我试图在以下位置显示错误消息edittext with setError方法 但它给出了以下异常 android view WindowManager BadTokenEx
  • 在 Postgresql 中归档旧数据

    目前 我期待有人就我将要进行的数据库归档过程提供建议 我的数据库 DB 1 有 2 个非常大的表 一个表有 25 GB 的数据 另一个表有 20 GB 的数据 即使我有索引 这也会导致主要的性能问题 因此 我们考虑通过以下过程归档旧数据 从
  • Jquery一次循环绑定10条记录

    我有一个场景 我从服务器获取数千条 JSON 记录并将所有记录绑定到页面 对于每条记录 我都在 jquery 中进行一些计算并将数据绑定到 UI 由于记录数为 1000 条 计算和绑定数据所需的时间更长 当所有记录计算完成后 页面上的数据将
  • MongoDB:在具有多个条件的数组中查找值

    我正在尝试根据价格范围过滤文档 我有以下文档结构示例 name test 1 priceObject price value 1000 price value 500 price value 333 我使用聚合来匹配
  • 访问未配置的 YouTube API

    我正在尝试将观看 YouTube 上的某些视频的功能添加到我正在创建的 iOS 应用程序中 我有来自 Google 的 API 密钥 并从开发者控制台启用了 YouTube API 正如评论所建议的那样 这不是问题 我有一个非常简单的方法
  • JBoss AS 7 中的集群 EJB 不平衡

    我已成功设置由 2 个 JBoss AS 7 实例组成的集群 并部署了以下 SLSB Stateless Remote TestEJBRemote class Clustered public class TestEJB implement
  • 如何在 Perforce 提交上触发 Jenkins 构建

    我将 Jenkins 与 Perforce 结合使用 我已经下载了P4插件 https wiki jenkins ci org display JENKINS P4 Plugin 我已经阅读了文档 但我仍然有点困惑 在我的 Jenkins
  • 刷新库存时出错。应用内结算

    我正在设置和测试应用内结算 我设法购买了 android test purchased 它做了它应该做的事情 但现在我需要消耗它来继续我的测试 问题是我无法到达库存 当调用它时 我得到 result isFaliure 被调用 但我无法获取
  • 如何从 Visual Studio 2013 中的项目生成类图?

    在 Visual Studio 2010 中 我只需单击两次即可从项目中生成类图 但现在在 Visual Studio 2013 中 我在项目菜单中看不到 查看类图 选项 这个物品在哪里消失了 现在如何从项目生成类图 右键单击解决方案资源管
  • 如何在Java中不使用正则表达式仅替换字符串一次?

    我需要替换较大字符串中的动态子字符串 但仅替换一次 即第一次匹配 String类只提供replace 它替换子字符串的所有实例 有一个replaceFirst 方法 但它只需要正则表达式而不是常规字符串 我对使用正则表达式有两个顾虑 1 我
  • 我的预购遍历出了什么问题?

    我正在尝试解决这个问题https oj leetcode com problems binary tree preorder traversal https oj leetcode com problems binary tree preo
  • 如何将 16 位灰度图像写入 jpeg?

    我有每像素 16 位灰度BufferedImage由一系列短裤创建 private BufferedImage get16bitImage short pixels ColorModel colorModel new ComponentCo