从原始数据的字节数组中获取缓冲图像

2024-03-11

我正在使用JNA。我从我的 C++ 方法中获取原始数据的字节数组。 现在我陷入了如何使用这个原始数据字节数组在java中获取缓冲图像的困境。 我尝试了一些方法来使其成为 tiff 图像,但我没有取得成功。 这是我到目前为止尝试过的代码。 这里我的字节数组包含 16 位灰度图像的数据。我从 x 传感器设备获取此数据。现在我需要从这个字节数组中获取图像。

第一次尝试

byte[] byteArray = myVar1.getByteArray(0, 3318000);//array of raw data

          ImageInputStream stream1=ImageIO.createImageInputStream(newByteArrayInputStream(byteArray));
            ByteArraySeekableStream stream=new ByteArraySeekableStream(byteArray,0,3318000);
                 BufferedImage bi = ImageIO.read(stream);

第二次尝试

        SeekableStream stream = new ByteArraySeekableStream(byteArray);
         String[] names = ImageCodec.getDecoderNames(stream);


          ImageDecoder dec = ImageCodec.createImageDecoder(names[0], stream, null);
//at this line get the error ArrayIndexOutOfBoundsException: 0 
            RenderedImage im = dec.decodeAsRenderedImage();

我想我在这里失踪了。 由于我的数组包含原始数据,因此它不包含 tiff 图像的标头。 我说得对吗? 如果是,那么如何在字节数组中提供此标头。最终如何从这个字节数组中获取图像?

为了测试我是否从我的本机方法中获取正确的字节数组,我将此字节数组存储为 .raw 文件,并在 ImageJ 软件中打开此原始文件后,它会向我播下正确的图像,因此我的原始数据是正确的。 我唯一需要的是如何将原始字节数组转换为图像字节数组?


这是我用来将原始像素数据转换为BufferedImage。我的像素是 16 位签名的:

public static BufferedImage short2Buffered(short[] pixels, int width, int height) throws IllegalArgumentException {
    BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_USHORT_GRAY);
    short[] imgData = ((DataBufferShort)image.getRaster().getDataBuffer()).getData();
    System.arraycopy(pixels, 0, imgData, 0, pixels.length);     
    return image;
}

然后我使用 JAI 对生成的图像进行编码。告诉我您是否也需要代码。

编辑:感谢@Brent Nash,我极大地提高了速度answer https://stackoverflow.com/a/12062505/1098603关于类似的问题。

编辑:为了完整起见,这里是无符号 8 位的代码:

public static BufferedImage byte2Buffered(byte[] pixels, int width, int height) throws IllegalArgumentException {
    BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY);
    byte[] imgData = ((DataBufferByte)image.getRaster().getDataBuffer()).getData();
    System.arraycopy(pixels, 0, imgData, 0, pixels.length);     
    return image;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从原始数据的字节数组中获取缓冲图像 的相关文章

随机推荐

  • 多页 WPF 应用程序

    我是桌面应用程序开发的新手 有一个非常基本的问题 我有一个名为 MainWindow 的 WPF 表单 我应该如何在其上拥有多个页面 例如 用户管理 管理内容 等 我想我有以下选择 使用多种形式 Tabs 分组框 任何澄清都会很棒 在我最近
  • 如何防止 pandas 数据框中的索引显示在 Excel 中?

    我有一个 pandas 数据框 df 其中包含一些我想输出到 Excel 的数据 但是我不希望将默认索引或与此相关的任何索引打印到工作表中 是 df values 吗 df2 1 category num 2 A 1 3 A 2 4 B 3
  • safari 上的 onbeforeunload 不显示确认消息

    我的这部分代码适用于除Safari 10 iOS 和 OSX 问题是 Safari 会触发beforeunload event但它不会显示在确认消息中 function goodbye e console log goodbye en fa
  • Rscript 无法识别 setGeneric 函数

    我正在尝试将 R 脚本转换为客户端可以在批处理模式下运行的脚本 我的代码使用通用函数 接近开头的一个片段如下 setGeneric testInput function inputData params list standardGener
  • Visual Studio 2017 MSBuild 任务开发

    使用 Visual Studio 2017 RC 开发自定义 MSBuild 任务时 我遇到以下问题 只要添加其他依赖项 而不仅仅是Microsoft Build Utilities Core 使用 v15 1 0 preview 0004
  • 如何在 Android 应用程序中请求照片/媒体/文件权限

    在此输入图像描述 https i stack imgur com 2M033 png我希望我的应用程序请求照片 媒体 文件权限 因为第三方库需要它 任何人都可以告诉我要请求哪个特定权限 Thanks 文件 照片和媒体都保存在存储中 您的 A
  • 在 jboss 服务器中为 Web 应用程序进行新部署后,浏览器缓存文件未更新

    我正在使用 jboss Server 7 1 1 来部署 java web 应用程序 对于 js css 字体文件 浏览器缓存不会随着新的更改而更新 每次我们都坚持要求客户清除浏览器中的缓存以使新的更改生效 是否有任何我可以配置的配置 以便
  • VB6中列出文件夹中指定类型的所有文件的任何函数

    我想知道是否有一些内置函数适用于下面描述的场景 输入是父文件夹的路径 该函数必须做的是 它应该列出该父文件夹内的所有 zip 文件 父文件夹可以包含任意数量的子文件夹 这同样适用于子文件夹 任何人都可以帮我解决这个问题吗 VB版不是路障 V
  • Java 桌面应用程序 - 哪种技术? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我需要实现一个Java桌面应用程序 您会推荐哪种框架 SWT Swing Java FX 还是其他框架 我要求该应用程序应在 Windows x
  • Inno Setup TInputQueryWizardPage (CreateInputQueryPage) 上如何减小两个输入框之间的行距

    我有一个TInputQueryWizardPage具有 8 个用户输入的页面 这增加了向导页面 https stackoverflow com q 11778292 但所有值仍然不可见 有没有办法减少两个值之间的行距 以便所有值都以当前向导
  • http-proxy-middleware 中的 60 秒超时

    我在使用时看到 60 秒超时chimurai http proxy middleware in Create React App我不明白它是从哪里来的 我正在端口 5000 上运行 API 并进行配置setupProxy js as con
  • 在 matplotlib 中自定义 x 轴

    In the figure below each unit in the x axis represents a 10mins interval I would like to customize the labels of x axis
  • 如何在午夜更新应用程序小部件?

    我的应用程序有一个小部件 显示今天的日期 需要在午夜更新 该小部件在清单中定义为
  • 为什么使用 UIPanGestureRecognizer 移动对象时会出现延迟?

    我要搬家了UIView对象使用UIPanGestureRecognizer 我在屏幕上拖动手指的次数 我向同一方向移动视图的次数 仅在 X 方向上 向左或向右 Y 方向不变 它工作正常 但是 非常明显 delay 这是处理的方法UIPanG
  • 重命名 IAM 角色

    我在创建 IAM 角色以允许 lambda 函数访问 cloudwatch 日志并创建 EC2 卷快照时犯了一个拼写错误 有没有办法重命名角色 无论是使用控制台还是 AWS CLI 创建角色后 您无法编辑 IAM 角色 这在多个地方都提到过
  • 将 FASTA 文件中的多个序列添加到 python 中的列表中

    我正在尝试组织具有多个序列的文件 在此过程中 我尝试将名称添加到列表中 并将序列添加到与名称列表并行的单独列表中 我弄清楚了如何将名称添加到列表中 但我不知道如何将其后面的序列添加到单独的列表中 我尝试将序列行附加到空字符串中 但它将所有序
  • C# 如何判断 DVD 驱动器托盘是否打开?

    我有一个用 C 编写的 DVD 读取和刻录应用程序 我希望能够检测空驱动器 无磁盘 和打开驱动器之间的区别 编辑 经过更多谷歌搜索后 我认为更好的问题描述是 我想访问驱动器托盘状态 打开或关闭 我可以用 ManagementObjectSe
  • ASP.NET MVC5/IIS Express 无法调试 - 代码未运行

    我启动 VS2013 VB Net MVC5 Web 应用程序 在 HomeController About 方法中设置断点并运行 开始调试 导航到 About 页面并接收消息 Code not running The current Th
  • gnu make“删除中间文件”

    我有以下规则 define compile c ECHO CC lt Q CC CFLAGS c MD o lt The following fixes the dependency file See http make paulandle
  • 从原始数据的字节数组中获取缓冲图像

    我正在使用JNA 我从我的 C 方法中获取原始数据的字节数组 现在我陷入了如何使用这个原始数据字节数组在java中获取缓冲图像的困境 我尝试了一些方法来使其成为 tiff 图像 但我没有取得成功 这是我到目前为止尝试过的代码 这里我的字节数