blob: 1a85697868c4bc70c063d6633ca738cd4ac3eae8 [file] [log] [blame]
/*
* 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 "filters.h"
void JNIFUNCF(ImageFilter, nativeApplyGradientFilter, jobject bitmap, jint width, jint height,
jintArray redGradient, jintArray greenGradient, jintArray blueGradient)
{
char* destination = 0;
jint* redGradientArray = 0;
jint* greenGradientArray = 0;
jint* blueGradientArray = 0;
if (redGradient)
redGradientArray = (*env)->GetIntArrayElements(env, redGradient, NULL);
if (greenGradient)
greenGradientArray = (*env)->GetIntArrayElements(env, greenGradient, NULL);
if (blueGradient)
blueGradientArray = (*env)->GetIntArrayElements(env, blueGradient, NULL);
AndroidBitmap_lockPixels(env, bitmap, (void**) &destination);
int i;
int len = width * height * 4;
for (i = 0; i < len; i+=4)
{
if (redGradient)
{
int r = destination[RED];
r = redGradientArray[r];
destination[RED] = r;
}
if (greenGradient)
{
int g = destination[GREEN];
g = greenGradientArray[g];
destination[GREEN] = g;
}
if (blueGradient)
{
int b = destination[BLUE];
b = blueGradientArray[b];
destination[BLUE] = b;
}
}
if (redGradient)
(*env)->ReleaseIntArrayElements(env, redGradient, redGradientArray, 0);
if (greenGradient)
(*env)->ReleaseIntArrayElements(env, greenGradient, greenGradientArray, 0);
if (blueGradient)
(*env)->ReleaseIntArrayElements(env, blueGradient, blueGradientArray, 0);
AndroidBitmap_unlockPixels(env, bitmap);
}