JNIEXPORT jint JNICALL Java_org_lwjgl_stb_STBImageResize_nstbir_1resize_1float___3FIII_3FIIII(JNIEnv *__env, jclass clazz, jfloatArray input_pixelsAddress, jint input_w, jint input_h, jint input_stride_in_bytes, jfloatArray output_pixelsAddress, jint output_w, jint output_h, jint output_stride_in_bytes, jint num_channels) { jint __result; jfloat *input_pixels = (*__env)->GetPrimitiveArrayCritical(__env, input_pixelsAddress, 0); jfloat *output_pixels = (*__env)->GetPrimitiveArrayCritical(__env, output_pixelsAddress, 0); UNUSED_PARAMS(__env, clazz) __result = (jint)stbir_resize_float((float const *)input_pixels, input_w, input_h, input_stride_in_bytes, (float *)output_pixels, output_w, output_h, output_stride_in_bytes, num_channels); (*__env)->ReleasePrimitiveArrayCritical(__env, output_pixelsAddress, output_pixels, 0); (*__env)->ReleasePrimitiveArrayCritical(__env, input_pixelsAddress, input_pixels, 0); return __result; }
Pixel4 *EXRLayer::get_downsampled_pixels(int width, int height) { if ((width == w) && (height == h)) { return pixels; } int key = get_size_key(width, height); if (pixel_size_bases.count(key) > 0) { return pixel_size_bases.at(key); } Pixel4 *downsampled_pixels = new Pixel4[width * height]; float *output_pixels = new float[width * height * 4]; float *input_pixels = new float[w * h * 4]; for (int i = 0; i < w * h; i++) { int input_idx = 4 * i; float r = pixels[i].r; float g = pixels[i].g; float b = pixels[i].b; float a = pixels[i].a; input_pixels[input_idx] = r; input_pixels[input_idx + 1] = g; input_pixels[input_idx + 2] = b; input_pixels[input_idx + 3] = a; } stbir_resize_float( input_pixels, w, h, 0, output_pixels, width, height, 0, 4 ); for (int i = 0; i < width * height; i++) { int output_idx = 4 * i; downsampled_pixels[i].r = output_pixels[output_idx]; downsampled_pixels[i].g = output_pixels[output_idx + 1]; downsampled_pixels[i].b = output_pixels[output_idx + 2]; downsampled_pixels[i].a = output_pixels[output_idx + 3]; } delete[] input_pixels; delete[] output_pixels; // Add this buffer to the map for future use pixel_size_bases[key] = downsampled_pixels; return downsampled_pixels; }
JNIEXPORT jint JNICALL Java_org_lwjgl_stb_STBImageResize_nstbir_1resize_1float__JIIIJIIII(JNIEnv *__env, jclass clazz, jlong input_pixelsAddress, jint input_w, jint input_h, jint input_stride_in_bytes, jlong output_pixelsAddress, jint output_w, jint output_h, jint output_stride_in_bytes, jint num_channels) { float const *input_pixels = (float const *)(intptr_t)input_pixelsAddress; float *output_pixels = (float *)(intptr_t)output_pixelsAddress; UNUSED_PARAMS(__env, clazz) return (jint)stbir_resize_float(input_pixels, input_w, input_h, input_stride_in_bytes, output_pixels, output_w, output_h, output_stride_in_bytes, num_channels); }