summaryrefslogtreecommitdiff
path: root/platform
diff options
context:
space:
mode:
authorTor Andersson <tor.andersson@artifex.com>2016-06-06 15:13:27 +0200
committerRobin Watts <robin.watts@artifex.com>2016-06-16 18:08:15 +0100
commitbafc03500857692703b3f7650936b13623e85bb1 (patch)
treebbdae885d7b86dc61849abdc7b617bf7afa46837 /platform
parentfe02a527fe1d309e584ffc3c65a84af829185930 (diff)
downloadmupdf-bafc03500857692703b3f7650936b13623e85bb1.tar.xz
Update JNI bindings for pixmap alpha changes.
Diffstat (limited to 'platform')
-rw-r--r--platform/java/com/artifex/mupdf/fitz/Image.java6
-rw-r--r--platform/java/com/artifex/mupdf/fitz/Pixmap.java24
-rw-r--r--platform/java/mupdf_native.c92
-rw-r--r--platform/java/mupdf_native.h16
4 files changed, 59 insertions, 79 deletions
diff --git a/platform/java/com/artifex/mupdf/fitz/Image.java b/platform/java/com/artifex/mupdf/fitz/Image.java
index 3876bc1b..a9eb2ffa 100644
--- a/platform/java/com/artifex/mupdf/fitz/Image.java
+++ b/platform/java/com/artifex/mupdf/fitz/Image.java
@@ -37,9 +37,5 @@ public class Image
public native boolean getInterpolate();
public native Image getMask();
- public native Pixmap toPixmap(int w, int h);
-
- public Pixmap toPixmap() {
- return toPixmap(getWidth(), getHeight());
- }
+ public native Pixmap toPixmap();
}
diff --git a/platform/java/com/artifex/mupdf/fitz/Pixmap.java b/platform/java/com/artifex/mupdf/fitz/Pixmap.java
index 61c833ff..61c5ddc6 100644
--- a/platform/java/com/artifex/mupdf/fitz/Pixmap.java
+++ b/platform/java/com/artifex/mupdf/fitz/Pixmap.java
@@ -11,22 +11,34 @@ public class Pixmap
pointer = 0;
}
- private native long newNative(ColorSpace cs, int x, int y, int w, int h);
+ private native long newNative(ColorSpace cs, int x, int y, int w, int h, boolean alpha);
private Pixmap(long p) {
pointer = p;
}
+ public Pixmap(ColorSpace colorspace, int x, int y, int w, int h, boolean alpha) {
+ pointer = newNative(colorspace, x, y, w, h, alpha);
+ }
+
public Pixmap(ColorSpace colorspace, int x, int y, int w, int h) {
- pointer = newNative(colorspace, x, y, w, h);
+ this(colorspace, x, y, w, h, false);
+ }
+
+ public Pixmap(ColorSpace colorspace, int w, int h, boolean alpha) {
+ this(colorspace, 0, 0, w, h, alpha);
}
public Pixmap(ColorSpace colorspace, int w, int h) {
- this(colorspace, 0, 0, w, h);
+ this(colorspace, 0, 0, w, h, false);
+ }
+
+ public Pixmap(ColorSpace colorspace, Rect rect, boolean alpha) {
+ this(colorspace, (int)rect.x0, (int)rect.y0, (int)(rect.x1 - rect.x0), (int)(rect.y1 - rect.y0), alpha);
}
public Pixmap(ColorSpace colorspace, Rect rect) {
- this(colorspace, (int)rect.x0, (int)rect.y0, (int)(rect.x1 - rect.x0), (int)(rect.y1 - rect.y0));
+ this(colorspace, rect, false);
}
public native void clear();
@@ -40,9 +52,10 @@ public class Pixmap
public native int getHeight();
public native int getStride();
public native int getNumberOfComponents();
+ public native boolean getAlpha();
public native ColorSpace getColorSpace();
public native byte[] getSamples();
- public native int[] getPixels(); /* only valid for RGB or BGR pixmaps */
+ public native int[] getPixels(); /* only valid for RGBA or BGRA pixmaps */
public void clear(int value) {
clearWithValue(value);
@@ -54,6 +67,7 @@ public class Pixmap
" x=" + getX() +
" y=" + getY() +
" n=" + getNumberOfComponents() +
+ " alpha=" + getAlpha() +
" cs=" + getColorSpace() +
")";
}
diff --git a/platform/java/mupdf_native.c b/platform/java/mupdf_native.c
index e835a76d..67465db8 100644
--- a/platform/java/mupdf_native.c
+++ b/platform/java/mupdf_native.c
@@ -2107,7 +2107,7 @@ FUN(Image_newImageFromBitmap)(JNIEnv *env, jobject self, jobject jbitmap, jlong
if (info.stride != info.width)
fz_throw(ctx, FZ_ERROR_GENERIC, "new Image failed as bitmap width != stride");
- pixmap = fz_new_pixmap(ctx, fz_device_rgb(ctx), info.width, info.height);
+ pixmap = fz_new_pixmap(ctx, fz_device_rgb(ctx), info.width, info.height, 1);
if (AndroidBitmap_lockPixels(env, jbitmap, &pixels) < 0)
fz_throw(ctx, FZ_ERROR_GENERIC, "Bitmap lock failed in new Image");
memcpy(pixmap->samples, pixels, info.width * info.height * 4);
@@ -2289,7 +2289,7 @@ FUN(Pixmap_finalize)(JNIEnv *env, jobject self)
}
JNIEXPORT jlong JNICALL
-FUN(Pixmap_newNative)(JNIEnv *env, jobject self, jobject colorspace_, jint x, jint y, jint w, jint h)
+FUN(Pixmap_newNative)(JNIEnv *env, jobject self, jobject colorspace_, jint x, jint y, jint w, jint h, jboolean alpha)
{
fz_context *ctx = get_context(env);
fz_colorspace *colorspace = from_ColorSpace(env, colorspace_);
@@ -2301,7 +2301,7 @@ FUN(Pixmap_newNative)(JNIEnv *env, jobject self, jobject colorspace_, jint x, ji
fz_try(ctx)
{
- pixmap = fz_new_pixmap(ctx, colorspace, w, h);
+ pixmap = fz_new_pixmap(ctx, colorspace, w, h, alpha);
pixmap->x = x;
pixmap->y = y;
}
@@ -2346,18 +2346,9 @@ FUN(Pixmap_getX)(JNIEnv *env, jobject self)
{
fz_context *ctx = get_context(env);
fz_pixmap *pixmap = from_Pixmap(env, self);
-
- int x = 0;
-
if (ctx == NULL || pixmap == NULL)
return 0;
-
- fz_try(ctx)
- x = fz_pixmap_x(ctx, pixmap);
- fz_catch(ctx)
- jni_rethrow(env, ctx);
-
- return x;
+ return pixmap->x;
}
JNIEXPORT jint JNICALL
@@ -2365,18 +2356,9 @@ FUN(Pixmap_getY)(JNIEnv *env, jobject self)
{
fz_context *ctx = get_context(env);
fz_pixmap *pixmap = from_Pixmap(env, self);
-
- int y = 0;
-
if (ctx == NULL || pixmap == NULL)
return 0;
-
- fz_try(ctx)
- y = fz_pixmap_y(ctx, pixmap);
- fz_catch(ctx)
- jni_rethrow(env, ctx);
-
- return y;
+ return pixmap->y;
}
JNIEXPORT jint JNICALL
@@ -2384,18 +2366,9 @@ FUN(Pixmap_getWidth)(JNIEnv *env, jobject self)
{
fz_context *ctx = get_context(env);
fz_pixmap *pixmap = from_Pixmap(env, self);
-
- int w = 0;
-
if (ctx == NULL || pixmap == NULL)
return 0;
-
- fz_try(ctx)
- w = fz_pixmap_width(ctx, pixmap);
- fz_catch(ctx)
- jni_rethrow(env, ctx);
-
- return w;
+ return pixmap->w;
}
JNIEXPORT jint JNICALL
@@ -2403,18 +2376,9 @@ FUN(Pixmap_getHeight)(JNIEnv *env, jobject self)
{
fz_context *ctx = get_context(env);
fz_pixmap *pixmap = from_Pixmap(env, self);
-
- int h = 0;
-
if (ctx == NULL || pixmap == NULL)
return 0;
-
- fz_try(ctx)
- h = fz_pixmap_height(ctx, pixmap);
- fz_catch(ctx)
- jni_rethrow(env, ctx);
-
- return h;
+ return pixmap->h;
}
JNIEXPORT jint JNICALL
@@ -2422,18 +2386,19 @@ FUN(Pixmap_getNumberOfComponents)(JNIEnv *env, jobject self)
{
fz_context *ctx = get_context(env);
fz_pixmap *pixmap = from_Pixmap(env, self);
-
- int n = 0;
-
if (ctx == NULL || pixmap == NULL)
return 0;
+ return pixmap->n;
+}
- fz_try(ctx)
- n = fz_pixmap_components(ctx, pixmap);
- fz_catch(ctx)
- jni_rethrow(env, ctx);
-
- return n;
+JNIEXPORT jboolean JNICALL
+FUN(Pixmap_getAlpha)(JNIEnv *env, jobject self)
+{
+ fz_context *ctx = get_context(env);
+ fz_pixmap *pixmap = from_Pixmap(env, self);
+ if (ctx == NULL || pixmap == NULL)
+ return 0;
+ return pixmap->alpha;
}
JNIEXPORT jint JNICALL
@@ -2441,18 +2406,9 @@ FUN(Pixmap_getStride)(JNIEnv *env, jobject self)
{
fz_context *ctx = get_context(env);
fz_pixmap *pixmap = from_Pixmap(env, self);
-
- int stride = 0;
-
if (ctx == NULL || pixmap == NULL)
return 0;
-
- fz_try(ctx)
- stride = fz_pixmap_stride(ctx, pixmap);
- fz_catch(ctx)
- jni_rethrow(env, ctx);
-
- return stride;
+ return pixmap->stride;
}
JNIEXPORT jobject JNICALL
@@ -2482,7 +2438,7 @@ FUN(Pixmap_getSamples)(JNIEnv *env, jobject self)
{
fz_context *ctx = get_context(env);
fz_pixmap *pixmap = from_Pixmap(env, self);
- int size = pixmap->w * pixmap->h * pixmap->n;
+ int size = pixmap->h * pixmap->stride;
jbyteArray ary;
if (ctx == NULL || pixmap == NULL)
@@ -2514,6 +2470,12 @@ FUN(Pixmap_getPixels)(JNIEnv *env, jobject self)
return NULL;
}
+ if (size != pixmap->h * pixmap->stride)
+ {
+ jni_throw(env, FZ_ERROR_GENERIC, "invalid stride for getPixels");
+ return NULL;
+ }
+
ary = (*env)->NewIntArray(env, size);
if (!ary)
return NULL;
@@ -3200,14 +3162,14 @@ FUN(Image_getMask)(JNIEnv *env, jobject self)
}
JNIEXPORT jobject JNICALL
-FUN(Image_toPixmap)(JNIEnv *env, jobject self, jint w, jint h)
+FUN(Image_toPixmap)(JNIEnv *env, jobject self)
{
fz_context *ctx = get_context(env);
fz_image *img = from_Image(env, self);
fz_pixmap *pixmap = NULL;
fz_try(ctx)
- pixmap = fz_get_pixmap_from_image(ctx, img, w, h);
+ pixmap = fz_get_pixmap_from_image(ctx, img, NULL, NULL, NULL, NULL);
fz_catch(ctx)
jni_rethrow(env, ctx);
diff --git a/platform/java/mupdf_native.h b/platform/java/mupdf_native.h
index 4b88903e..a15501d2 100644
--- a/platform/java/mupdf_native.h
+++ b/platform/java/mupdf_native.h
@@ -712,10 +712,10 @@ JNIEXPORT jobject JNICALL Java_com_artifex_mupdf_fitz_Image_getMask
/*
* Class: com_artifex_mupdf_fitz_Image
* Method: toPixmap
- * Signature: (II)Lcom/artifex/mupdf/fitz/Pixmap;
+ * Signature: ()Lcom/artifex/mupdf/fitz/Pixmap;
*/
JNIEXPORT jobject JNICALL Java_com_artifex_mupdf_fitz_Image_toPixmap
- (JNIEnv *, jobject, jint, jint);
+ (JNIEnv *, jobject);
#ifdef __cplusplus
}
@@ -1240,10 +1240,10 @@ JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_Pixmap_finalize
/*
* Class: com_artifex_mupdf_fitz_Pixmap
* Method: newNative
- * Signature: (Lcom/artifex/mupdf/fitz/ColorSpace;IIII)J
+ * Signature: (Lcom/artifex/mupdf/fitz/ColorSpace;IIIIZ)J
*/
JNIEXPORT jlong JNICALL Java_com_artifex_mupdf_fitz_Pixmap_newNative
- (JNIEnv *, jobject, jobject, jint, jint, jint, jint);
+ (JNIEnv *, jobject, jobject, jint, jint, jint, jint, jboolean);
/*
* Class: com_artifex_mupdf_fitz_Pixmap
@@ -1319,6 +1319,14 @@ JNIEXPORT jint JNICALL Java_com_artifex_mupdf_fitz_Pixmap_getNumberOfComponents
/*
* Class: com_artifex_mupdf_fitz_Pixmap
+ * Method: getAlpha
+ * Signature: ()Z
+ */
+JNIEXPORT jboolean JNICALL Java_com_artifex_mupdf_fitz_Pixmap_getAlpha
+ (JNIEnv *, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_Pixmap
* Method: getColorSpace
* Signature: ()Lcom/artifex/mupdf/fitz/ColorSpace;
*/