Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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());_Java_C++_Image_Java Native Interface_Indexoutofboundsexception - Fatal编程技术网

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

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());,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

我得到的缓冲区大小(sz在我的代码中)等于10000


为什么呢?我遗漏了什么(可能很明显?

我的问题解决了,当我使用另一种颜色类型时,
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字节。