src/macosx/native/sun/awt/CImage.m
Print this page
*** 434,438 ****
--- 434,502 ----
JNF_COCOA_EXIT(env);
return jreturnArray;
}
+
+ /*
+ * Class: sun_lwawt_macosx_CImage
+ * Method: nativeGetPlatformImageBytes
+ * Signature: ([III)[B
+ */
+ JNIEXPORT jbyteArray JNICALL Java_sun_lwawt_macosx_CImage_nativeGetPlatformImageBytes
+ (JNIEnv *env, jclass klass, jintArray buffer, jint width, jint height)
+ {
+ jbyteArray result = 0L;
+
+ JNF_COCOA_ENTER(env);
+
+ NSBitmapImageRep* imageRep = CImage_CreateImageRep(env, buffer, width, height);
+ if (imageRep) {
+ NSData *tiffImage = [imageRep TIFFRepresentation];
+ jsize tiffSize = (jsize)[tiffImage length];
+ result = (*env)->NewByteArray(env, tiffSize);
+ CHECK_NULL_RETURN(result, nil);
+ jbyte *tiffData = (jbyte *)(*env)->GetPrimitiveArrayCritical(env, result, 0);
+ CHECK_NULL_RETURN(tiffData, nil);
+ [tiffImage getBytes:tiffData];
+ (*env)->ReleasePrimitiveArrayCritical(env, result, tiffData, 0);
+ [imageRep release];
+ }
+
+ JNF_COCOA_EXIT(env);
+
+ return result;
+ }
+
+ /*
+ * Class: sun_lwawt_macosx_CImage
+ * Method: nativeCreateNSImageFromBytes
+ * Signature: ([B)J
+ */
+ JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CImage_nativeCreateNSImageFromBytes
+ (JNIEnv *env, jclass klass, jbyteArray sourceData)
+ {
+ jlong result = 0L;
+ CHECK_NULL_RETURN(sourceData, 0L);
+
+ JNF_COCOA_ENTER(env);
+
+ jsize sourceSize = (*env)->GetArrayLength(env, sourceData);
+ if (sourceSize == 0) return 0L;
+
+ jbyte *sourceBytes = (*env)->GetPrimitiveArrayCritical(env, sourceData, NULL);
+ CHECK_NULL_RETURN(sourceBytes, 0L);
+ NSData *rawData = [NSData dataWithBytes:sourceBytes length:sourceSize];
+
+ NSImage *newImage = [[NSImage alloc] initWithData:rawData];
+ if (newImage) CFRetain(newImage); // GC
+ [newImage release];
+
+ (*env)->ReleasePrimitiveArrayCritical(env, sourceData, sourceBytes, JNI_ABORT);
+ CHECK_NULL_RETURN(newImage, 0L);
+
+ result = ptr_to_jlong(newImage);
+ JNF_COCOA_EXIT(env);
+
+ return result;
+ }
+