From 006f580da4867ca3bd4d2ce47b9b2b47c4a0d3a3 Mon Sep 17 00:00:00 2001 From: Ruben Brunk Date: Mon, 8 Oct 2012 16:05:48 -0700 Subject: Added the rest of the Geometryfilter stubs. Bug: 7224232 Bug: 7218935 Change-Id: I9ebbc4a98b5696e1514995e465aa4e145fdfa4f8 --- jni/filters/geometry.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 66 insertions(+), 2 deletions(-) (limited to 'jni/filters') diff --git a/jni/filters/geometry.c b/jni/filters/geometry.c index f2f5b27bc..8550dd778 100644 --- a/jni/filters/geometry.c +++ b/jni/filters/geometry.c @@ -19,14 +19,18 @@ void JNIFUNCF(ImageFilterGeometry, nativeApplyFilterFlip, jobject src, jint srcWidth, jint srcHeight, jobject dst, jint dstWidth, jint dstHeight, jint flip) { char* destination = 0; char* source = 0; + int len = dstWidth * dstHeight * 4; + if (srcWidth != dstWidth || srcHeight != dstHeight) { + return; + } AndroidBitmap_lockPixels(env, src, (void**) &source); AndroidBitmap_lockPixels(env, dst, (void**) &destination); int i = 0; - for (; i < dstWidth * dstHeight * 4; i+=4) { + for (; i < len; i += 4) { int r = source[RED]; int g = source[GREEN]; int b = source[BLUE]; - + // TODO: implement flip destination[RED] = 255; destination[GREEN] = g; destination[BLUE] = b; @@ -34,3 +38,63 @@ void JNIFUNCF(ImageFilterGeometry, nativeApplyFilterFlip, jobject src, jint srcW AndroidBitmap_unlockPixels(env, dst); AndroidBitmap_unlockPixels(env, src); } + +void JNIFUNCF(ImageFilterGeometry, nativeApplyFilterRotate, jobject src, jint srcWidth, jint srcHeight, jobject dst, jint dstWidth, jint dstHeight, jfloat rotate) { + char* destination = 0; + char* source = 0; + int len = dstWidth * dstHeight * 4; + AndroidBitmap_lockPixels(env, src, (void**) &source); + AndroidBitmap_lockPixels(env, dst, (void**) &destination); + // TODO: implement rotate + int i = 0; + for (; i < len; i += 4) { + int r = source[RED]; + int g = source[GREEN]; + int b = source[BLUE]; + destination[RED] = r; + destination[GREEN] = 255; + destination[BLUE] = b; + } + AndroidBitmap_unlockPixels(env, dst); + AndroidBitmap_unlockPixels(env, src); +} + +void JNIFUNCF(ImageFilterGeometry, nativeApplyFilterCrop, jobject src, jint srcWidth, jint srcHeight, jobject dst, jint dstWidth, jint dstHeight, jint offsetWidth, jint offsetHeight) { + char* destination = 0; + char* source = 0; + int len = dstWidth * dstHeight * 4; + AndroidBitmap_lockPixels(env, src, (void**) &source); + AndroidBitmap_lockPixels(env, dst, (void**) &destination); + // TODO: implement crop + int i = 0; + for (; i < len; i += 4) { + int r = source[RED]; + int g = source[GREEN]; + int b = source[BLUE]; + destination[RED] = r; + destination[GREEN] = g; + destination[BLUE] = 255; + } + AndroidBitmap_unlockPixels(env, dst); + AndroidBitmap_unlockPixels(env, src); +} + +void JNIFUNCF(ImageFilterGeometry, nativeApplyFilterStraighten, jobject src, jint srcWidth, jint srcHeight, jobject dst, jint dstWidth, jint dstHeight, jfloat straightenAngle) { + char* destination = 0; + char* source = 0; + int len = dstWidth * dstHeight * 4; + AndroidBitmap_lockPixels(env, src, (void**) &source); + AndroidBitmap_lockPixels(env, dst, (void**) &destination); + // TODO: implement straighten + int i = 0; + for (; i < len; i += 4) { + int r = source[RED]; + int g = source[GREEN]; + int b = source[BLUE]; + destination[RED] = 128; + destination[GREEN] = g; + destination[BLUE] = 128; + } + AndroidBitmap_unlockPixels(env, dst); + AndroidBitmap_unlockPixels(env, src); +} -- cgit v1.2.3