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;
}
Exemple #2
0
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);
}