当前位置: 首页 > 知识库问答 >
问题:

使用JNI将图像从C++发送到Java

堵琨
2023-03-14

我正在尝试使用JNI将一个图像从C++发送到java。该图像是一个用C++创建的位图,其中我使用GetDibits将像素转换为一个字符*。当使用C++将图像保存到文件中时,没有任何问题,但是当将像素发送到Java时,图像会变得模糊。JavaDocs说我必须使用3byte_bgr来实现BufferedImage,但我觉得压缩中有问题

C++位图

这是图像的结果

共有1个答案

晋弘义
2023-03-14

假定bi.bitcount为32,对BufferedImage使用3byte_bgr格式是不正确的:它假设每三个字节有一个像素,而不是每四个字节有一个像素。相反,请使用type_int_bgr。正如我们在注释中所讨论的,您的DataBuffer将需要是DataBufferInt,您可以通过使用ByteBuffer和IntBuffer来实现,如以下代码段所示:

BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);
IntBuffer intBuffer = ByteBuffer.wrap(img).asIntBuffer();
int[] imgInts = new int[img.length * Byte.SIZE / Integer.SIZE];
intBuffer.get(imgInts);
image.setData(Raster.createRaster(image.getSampleModel(), new DataBufferInt(imgInts, imgInts.length), new Point()));
 类似资料:
  • 问题内容: 我正在构建Android应用程序的项目的C 方面。我需要一些信息(通过字符串和字符串数组)传递给Java应用程序(通过JNI)。我以前从未做过,相反方向的人没有C 的经验,并承认他们不能真正提供帮助。 我确实找到了以下代码(从这里开始) 但这对我来说毫无意义。通常,我不确定如何将其合并到程序的C ++端,而且我无法确切了解其工作原理。代码是否在执行该行时发出消息?还是在for循环中执行

  • 问题内容: 我有一个生成图像的Java Applet。最终,我想将图像数据插入数据库中,因此我想将图像数据临时存储在包含小程序的页面上的表单字段中。我希望在不将图像文件存储在客户端计算机上的情况下执行此操作。 所有这些都来自签名板。这是一些应该从sigObj对象中存储的矢量数据生成位图图像的代码: image变量是BufferedImage对象。另外,如果我只是将图像变量发送回我的JavaScri

  • 我试图通过套接字将protobuf从C++应用程序发送到Java应用程序。我正在使用一个简单的套接字在muc++程序发送protobuf。在通过网络发送之前,我已经将其序列化到char缓冲区。在我的Java(服务器)程序中,我使用ServerSocket来接收数据。 我有麻烦反序列化的原Buf在Java那边。它一直给我错误: 解析协议消息时,输入在字段中间意外结束。这可能意味着输入被截断,或者嵌入

  • 我需要在XUL桌面应用程序的画布上显示一个图像(~5000*~7000像素)。图像数据来自C-DLL,它执行基本的图像处理操作。到目前为止,我尝试的方法存在性能问题: > 我试图在我的dll中将图像编码为Base64,并通过js-Ctype将字符串发送到javascript,并将b64字符串设置为基本html图像对象的源。( 我试图将jpg的图像写入硬盘,并在javascript中再次加载(〜3-

  • 问题内容: 我有当前的应用程序,该应用程序从MySQL数据库发送和检索数据,但是到目前为止,我要传递的信息是String。如何更新下面的代码以也可以发送图像。 注意:我已经像其他String字段一样添加了image字段,但是应用程序现在停止了,它显然无法将图片转换为Text。让我知道您的想法或任何可用的转换。我只是拍张照片,然后将照片发送给MySQL。 问题答案: 如果要在服务器上发送图像!您必须

  • 你好,我想上传多张图片到firebase。目前我可以上传1张图片。尽管如此,我还是决定将所有内容作为HTML,比如标题、描述和图像,放在一个webview中,并从那里显示出来。目前,这项工作还不错,我在firebase中有一个字符串,包含所有这些内容: 不过,正如您所见,这只是本地存储的工作形式。如何下载这些图像并用正确的firebase图像URL替换图像src。