1c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner/* 2c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * Copyright (C) 2009 The Android Open Source Project 3c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * 4c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * Licensed under the Apache License, Version 2.0 (the "License"); 5c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * you may not use this file except in compliance with the License. 6c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * You may obtain a copy of the License at 7c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * 8c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * http://www.apache.org/licenses/LICENSE-2.0 9c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * 10c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * Unless required by applicable law or agreed to in writing, software 11c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * distributed under the License is distributed on an "AS IS" BASIS, 12c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * See the License for the specific language governing permissions and 14c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * limitations under the License. 15c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner */ 16c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 17c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#ifndef ANDROID_BITMAP_H 18c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define ANDROID_BITMAP_H 19c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 20c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#include <stdint.h> 21c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#include <jni.h> 22c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 23c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#ifdef __cplusplus 24c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnerextern "C" { 25c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#endif 26c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 27c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define ANDROID_BITMAP_RESUT_SUCCESS 0 28c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define ANDROID_BITMAP_RESULT_BAD_PARAMETER -1 29c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define ANDROID_BITMAP_RESULT_JNI_EXCEPTION -2 30c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define ANDROID_BITMAP_RESULT_ALLOCATION_FAILED -3 31c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 32c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnerenum AndroidBitmapFormat { 33c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner ANDROID_BITMAP_FORMAT_NONE = 0, 34c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner ANDROID_BITMAP_FORMAT_RGBA_8888 = 1, 35c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner ANDROID_BITMAP_FORMAT_RGB_565 = 4, 36c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner ANDROID_BITMAP_FORMAT_RGBA_4444 = 7, 37c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner ANDROID_BITMAP_FORMAT_A_8 = 8, 38c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner}; 39c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 40c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnertypedef struct { 41c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner uint32_t width; 42c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner uint32_t height; 43c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner uint32_t stride; 44c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner int32_t format; 45c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner uint32_t flags; // 0 for now 46c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner} AndroidBitmapInfo; 47c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 48c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner/** 49c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * Given a java bitmap object, fill out the AndroidBitmap struct for it. 50c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * If the call fails, the info parameter will be ignored 51c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner */ 52c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnerint AndroidBitmap_getInfo(JNIEnv* env, jobject jbitmap, 53c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner AndroidBitmapInfo* info); 54c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 55c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner/** 56c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * Given a java bitmap object, attempt to lock the pixel address. 57c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * Locking will ensure that the memory for the pixels will not move 58c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * until the unlockPixels call, and ensure that, if the pixels had been 59c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * previously purged, they will have been restored. 60c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * 61c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * If this call succeeds, it must be balanced by a call to 62c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * AndroidBitmap_unlockPixels, after which time the address of the pixels should 63c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * no longer be used. 64c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * 65c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * If this succeeds, *addrPtr will be set to the pixel address. If the call 66c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * fails, addrPtr will be ignored. 67c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner */ 68c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnerint AndroidBitmap_lockPixels(JNIEnv* env, jobject jbitmap, void** addrPtr); 69c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 70c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner/** 71c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * Call this to balanace a successful call to AndroidBitmap_lockPixels 72c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner */ 73c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnerint AndroidBitmap_unlockPixels(JNIEnv* env, jobject jbitmap); 74c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 75c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#ifdef __cplusplus 76c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner} 77c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#endif 78c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 79c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#endif 80