OSDN Git Service

am 8fd42e1f: am 0ccadcf4: am 0d7cdf8e: Initial import of the new image editor
[android-x86/packages-apps-Gallery2.git] / jni / filters / saturated.c
1 /*
2  * Copyright (C) 2012 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #include "filters.h"
18
19 void JNIFUNCF(ImageFilterSaturated, nativeApplyFilter, jobject bitmap, jint width, jint height, jfloat saturation)
20 {
21     char* destination = 0;
22     AndroidBitmap_lockPixels(env, bitmap, (void**) &destination);
23     int i;
24     int len = width * height * 4;
25     float Rf = 0.2999f;
26     float Gf = 0.587f;
27     float Bf = 0.114f;
28     float S = saturation;;
29     float MS = 1.0f - S;
30     float Rt = Rf * MS;
31     float Gt = Gf * MS;
32     float Bt = Bf * MS;
33     float R, G, B;
34     for (i = 0; i < len; i+=4)
35     {
36         int r = destination[RED];
37         int g = destination[GREEN];
38         int b = destination[BLUE];
39         int t = (r + g) / 2;
40         R = r;
41         G = g;
42         B = b;
43
44         float Rc = R * (Rt + S) + G * Gt + B * Bt;
45         float Gc = R * Rt + G * (Gt + S) + B * Bt;
46         float Bc = R * Rt + G * Gt + B * (Bt + S);
47
48         destination[RED] = CLAMP(Rc);
49         destination[GREEN] = CLAMP(Gc);
50         destination[BLUE] = CLAMP(Bc);
51     }
52     AndroidBitmap_unlockPixels(env, bitmap);
53 }