簡體   English   中英

使用JNI將圖像從C ++發送到Java

[英]Send image from C++ to Java using JNI

我正在嘗試使用JNI將圖像從C ++發送到java。 該圖像是在C ++中創建的位圖,我使用GetDIBits將像素轉換為char* 使用C ++將圖像保存到文件時沒有問題,但是當將像素發送到Java時,圖像模糊不清。 JavaDocs說我必須使用3BYTE_BGR用於BufferedImage,但我覺得壓縮有問題

C ++位圖

在Java中轉換為BufferedImage,寬度和高度也通過jni接收

這是圖像的結果

鑒於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()));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM