[英]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.