BuffereImage缓冲区大小错误 我从C++获得图像数据,我想用JNI传递给java。 我的代码如下: jclass bitmap_class = (jclass) env->FindClass("java/awt/image/BufferedImage"); jclass raster_class = (jclass) env->FindClass("java/awt/image/WritableRaster"); jclass data_class = (jclass) env->FindClass("java/awt/image/DataBufferByte"); jmethodID constructor = env->GetMethodID(bitmap_class, "<init>", "(III)V"); int w = nativeFrame->Width(); int h = nativeFrame->Height(); int t = 2; // That is TYPE_INT_ARGB jobject bitmap = env->NewObject(bitmap_class, constructor, w, h, t);//byteType); jmethodID getRaster = env->GetMethodID(bitmap_class, "getRaster", "()Ljava/awt/image/WritableRaster;"); jobject raster = env->CallObjectMethod(bitmap, getRaster); jmethodID getDataBuffer = env->GetMethodID(raster_class, "getDataBuffer", "()Ljava/awt/image/DataBuffer;"); jobject dataBuffer = env->CallObjectMethod(raster, getDataBuffer); jmethodID getData = env->GetMethodID(data_class, "getData", "()[B"); jobject pixelsObject = env->CallObjectMethod(dataBuffer, getData); jbyteArray pixels = (jbyteArray)pixelsObject; long sz = env->GetArrayLength(pixels); env->SetByteArrayRegion(pixels, (jsize)0, (jsize)nativeFrame->BufferSize(), (jbyte*) nativeFrame->GetData());
我得到的缓冲区大小(sz在我的代码中)等于10000BuffereImage缓冲区大小错误 我从C++获得图像数据,我想用JNI传递给java。 我的代码如下: jclass bitmap_class = (jclass) env->FindClass("java/awt/image/BufferedImage"); jclass raster_class = (jclass) env->FindClass("java/awt/image/WritableRaster"); jclass data_class = (jclass) env->FindClass("java/awt/image/DataBufferByte"); jmethodID constructor = env->GetMethodID(bitmap_class, "<init>", "(III)V"); int w = nativeFrame->Width(); int h = nativeFrame->Height(); int t = 2; // That is TYPE_INT_ARGB jobject bitmap = env->NewObject(bitmap_class, constructor, w, h, t);//byteType); jmethodID getRaster = env->GetMethodID(bitmap_class, "getRaster", "()Ljava/awt/image/WritableRaster;"); jobject raster = env->CallObjectMethod(bitmap, getRaster); jmethodID getDataBuffer = env->GetMethodID(raster_class, "getDataBuffer", "()Ljava/awt/image/DataBuffer;"); jobject dataBuffer = env->CallObjectMethod(raster, getDataBuffer); jmethodID getData = env->GetMethodID(data_class, "getData", "()[B"); jobject pixelsObject = env->CallObjectMethod(dataBuffer, getData); jbyteArray pixels = (jbyteArray)pixelsObject; long sz = env->GetArrayLength(pixels); env->SetByteArrayRegion(pixels, (jsize)0, (jsize)nativeFrame->BufferSize(), (jbyte*) nativeFrame->GetData());,java,c++,image,java-native-interface,indexoutofboundsexception,Java,C++,Image,Java Native Interface,Indexoutofboundsexception,我得到的缓冲区大小(sz在我的代码中)等于10000 为什么呢?我遗漏了什么(可能很明显?我的问题解决了,当我使用另一种颜色类型时,type\u 4BYTE\u ABGR而不是type\u INT\u ARGB。我看不出它会如何影响缓冲区大小,根据文档,两者都是如此: an image with 8-bit RGBA color components 然而,我现在得到了一个正确的缓冲区大小。 我将尝试进行更多调查,并在找到解释后发布更新 我的问题解决了,当我使用另一种颜色类型时,type\u
为什么呢?我遗漏了什么(可能很明显?我的问题解决了,当我使用另一种颜色类型时,
type\u 4BYTE\u ABGR
而不是type\u INT\u ARGB
。我看不出它会如何影响缓冲区大小,根据文档,两者都是如此:
an image with 8-bit RGBA color components
然而,我现在得到了一个正确的缓冲区大小。
我将尝试进行更多调查,并在找到解释后发布更新 我的问题解决了,当我使用另一种颜色类型时,
type\u 4BYTE\u ABGR
而不是type\u INT\u ARGB
。我看不出它会如何影响缓冲区大小,根据文档,两者都是如此:
an image with 8-bit RGBA color components
然而,我现在得到了一个正确的缓冲区大小。
我将尝试进行更多调查,并在找到解释后发布更新 是的,我在32位Linux平台上。此外,它是Java,所以总是4字节。是的,我在32位Linux平台上。此外,它是Java,所以总是4字节。