Loading jni/Android.mk +1 −0 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ LOCAL_SRC_FILES := filters/bw.c \ filters/fx.c \ filters/wbalance.c \ filters/redeye.c \ filters/bwfilter.c \ filters/tinyplanet.cc LOCAL_CFLAGS += -ffast-math -O3 -funroll-loops Loading jni/filters/bwfilter.c 0 → 100644 +55 −0 Original line number Diff line number Diff line /* * Copyright (C) 2012 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include <math.h> #include "filters.h" void JNIFUNCF(ImageFilterBwFilter, nativeApplyFilter, jobject bitmap, jint width, jint height, jint rw, jint gw, jint bw) { char* destination = 0; AndroidBitmap_lockPixels(env, bitmap, (void**) &destination); unsigned char * rgb = (unsigned char * )destination; float sr = rw; float sg = gw; float sb = bw; float min = MIN(sg,sb); min = MIN(sr,min); float max = MAX(sg,sb); max = MAX(sr,max); float avg = (min+max)/2; sb /= avg; sg /= avg; sr /= avg; int i; int len = width * height * 4; for (i = 0; i < len; i+=4) { float r = sr *rgb[RED]; float g = sg *rgb[GREEN]; float b = sb *rgb[BLUE]; min = MIN(g,b); min = MIN(r,min); max = MAX(g,b); max = MAX(r,max); avg =(min+max)/2; rgb[RED] = CLAMP(avg); rgb[GREEN] = rgb[RED]; rgb[BLUE] = rgb[RED]; } AndroidBitmap_unlockPixels(env, bitmap); } jni/filters/tinyplanet.cc +5 −4 Original line number Diff line number Diff line Loading @@ -87,7 +87,7 @@ inline float wrap(float value, float dimension) { return value - (dimension * floor(value/dimension)); } void StereographicProjection(float scale, unsigned char* input_image, void StereographicProjection(float scale, float angle, unsigned char* input_image, int input_width, int input_height, unsigned char* output_image, int output_width, int output_height) { Loading @@ -106,7 +106,8 @@ void StereographicProjection(float scale, unsigned char* input_image, // Convert to polar float r = hypotf(xf, yf); float theta = atan2(yf, xf); float theta = angle+atan2(yf, xf); if (theta>PI_F) theta-=2*PI_F; // Project onto plane float phi = 2 * atan(1 / r); Loading @@ -127,7 +128,7 @@ void StereographicProjection(float scale, unsigned char* input_image, } void JNIFUNCF(ImageFilterTinyPlanet, nativeApplyFilter, jobject bitmap_in, jint width, jint height, jobject bitmap_out, jint output_size, jfloat scale) void JNIFUNCF(ImageFilterTinyPlanet, nativeApplyFilter, jobject bitmap_in, jint width, jint height, jobject bitmap_out, jint output_size, jfloat scale,jfloat angle) { char* source = 0; char* destination = 0; Loading @@ -136,7 +137,7 @@ void JNIFUNCF(ImageFilterTinyPlanet, nativeApplyFilter, jobject bitmap_in, jint unsigned char * rgb_in = (unsigned char * )source; unsigned char * rgb_out = (unsigned char * )destination; StereographicProjection(scale, rgb_in, width, height, rgb_out, output_size, output_size); StereographicProjection(scale,angle, rgb_in, width, height, rgb_out, output_size, output_size); AndroidBitmap_unlockPixels(env, bitmap_in); AndroidBitmap_unlockPixels(env, bitmap_out); } Loading res/layout/filtershow_activity.xml +6 −0 Original line number Diff line number Diff line Loading @@ -358,6 +358,12 @@ android:src="@drawable/filtershow_button_colors_contrast" android:text="@string/saturation" /> <com.android.gallery3d.filtershow.ui.ImageButtonTitle android:id="@+id/bwfilterButton" style="@style/FilterShowBottomButton" android:src="@drawable/filtershow_button_colors_contrast" android:text="@string/bwfilter" /> </LinearLayout> </HorizontalScrollView> </FrameLayout> Loading res/values/filtershow_strings.xml +2 −0 Original line number Diff line number Diff line Loading @@ -103,6 +103,8 @@ <string name="vibrance">Vibrance</string> <!-- Label for the saturation filter button [CHAR LIMIT=15] --> <string name="saturation">Saturation</string> <!-- Label for the BW filter button [CHAR LIMIT=15] --> <string name="bwfilter">BW Filter</string> <!-- Label for the White Balance filter button [CHAR LIMIT=15] --> <string name="wbalance">Autocolor</string> <!-- Label for the Hue filter button [CHAR LIMIT=15] --> Loading Loading
jni/Android.mk +1 −0 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ LOCAL_SRC_FILES := filters/bw.c \ filters/fx.c \ filters/wbalance.c \ filters/redeye.c \ filters/bwfilter.c \ filters/tinyplanet.cc LOCAL_CFLAGS += -ffast-math -O3 -funroll-loops Loading
jni/filters/bwfilter.c 0 → 100644 +55 −0 Original line number Diff line number Diff line /* * Copyright (C) 2012 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include <math.h> #include "filters.h" void JNIFUNCF(ImageFilterBwFilter, nativeApplyFilter, jobject bitmap, jint width, jint height, jint rw, jint gw, jint bw) { char* destination = 0; AndroidBitmap_lockPixels(env, bitmap, (void**) &destination); unsigned char * rgb = (unsigned char * )destination; float sr = rw; float sg = gw; float sb = bw; float min = MIN(sg,sb); min = MIN(sr,min); float max = MAX(sg,sb); max = MAX(sr,max); float avg = (min+max)/2; sb /= avg; sg /= avg; sr /= avg; int i; int len = width * height * 4; for (i = 0; i < len; i+=4) { float r = sr *rgb[RED]; float g = sg *rgb[GREEN]; float b = sb *rgb[BLUE]; min = MIN(g,b); min = MIN(r,min); max = MAX(g,b); max = MAX(r,max); avg =(min+max)/2; rgb[RED] = CLAMP(avg); rgb[GREEN] = rgb[RED]; rgb[BLUE] = rgb[RED]; } AndroidBitmap_unlockPixels(env, bitmap); }
jni/filters/tinyplanet.cc +5 −4 Original line number Diff line number Diff line Loading @@ -87,7 +87,7 @@ inline float wrap(float value, float dimension) { return value - (dimension * floor(value/dimension)); } void StereographicProjection(float scale, unsigned char* input_image, void StereographicProjection(float scale, float angle, unsigned char* input_image, int input_width, int input_height, unsigned char* output_image, int output_width, int output_height) { Loading @@ -106,7 +106,8 @@ void StereographicProjection(float scale, unsigned char* input_image, // Convert to polar float r = hypotf(xf, yf); float theta = atan2(yf, xf); float theta = angle+atan2(yf, xf); if (theta>PI_F) theta-=2*PI_F; // Project onto plane float phi = 2 * atan(1 / r); Loading @@ -127,7 +128,7 @@ void StereographicProjection(float scale, unsigned char* input_image, } void JNIFUNCF(ImageFilterTinyPlanet, nativeApplyFilter, jobject bitmap_in, jint width, jint height, jobject bitmap_out, jint output_size, jfloat scale) void JNIFUNCF(ImageFilterTinyPlanet, nativeApplyFilter, jobject bitmap_in, jint width, jint height, jobject bitmap_out, jint output_size, jfloat scale,jfloat angle) { char* source = 0; char* destination = 0; Loading @@ -136,7 +137,7 @@ void JNIFUNCF(ImageFilterTinyPlanet, nativeApplyFilter, jobject bitmap_in, jint unsigned char * rgb_in = (unsigned char * )source; unsigned char * rgb_out = (unsigned char * )destination; StereographicProjection(scale, rgb_in, width, height, rgb_out, output_size, output_size); StereographicProjection(scale,angle, rgb_in, width, height, rgb_out, output_size, output_size); AndroidBitmap_unlockPixels(env, bitmap_in); AndroidBitmap_unlockPixels(env, bitmap_out); } Loading
res/layout/filtershow_activity.xml +6 −0 Original line number Diff line number Diff line Loading @@ -358,6 +358,12 @@ android:src="@drawable/filtershow_button_colors_contrast" android:text="@string/saturation" /> <com.android.gallery3d.filtershow.ui.ImageButtonTitle android:id="@+id/bwfilterButton" style="@style/FilterShowBottomButton" android:src="@drawable/filtershow_button_colors_contrast" android:text="@string/bwfilter" /> </LinearLayout> </HorizontalScrollView> </FrameLayout> Loading
res/values/filtershow_strings.xml +2 −0 Original line number Diff line number Diff line Loading @@ -103,6 +103,8 @@ <string name="vibrance">Vibrance</string> <!-- Label for the saturation filter button [CHAR LIMIT=15] --> <string name="saturation">Saturation</string> <!-- Label for the BW filter button [CHAR LIMIT=15] --> <string name="bwfilter">BW Filter</string> <!-- Label for the White Balance filter button [CHAR LIMIT=15] --> <string name="wbalance">Autocolor</string> <!-- Label for the Hue filter button [CHAR LIMIT=15] --> Loading