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