bitmap.h revision c118edfc1ab9a608537ebc2f2ec936216f15a36c
1fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville/*
2fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville * Copyright (C) 2009 The Android Open Source Project
3fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville *
4fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville * Licensed under the Apache License, Version 2.0 (the "License");
5fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville * you may not use this file except in compliance with the License.
6fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville * You may obtain a copy of the License at
7fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville *
8fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville *      http://www.apache.org/licenses/LICENSE-2.0
9fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville *
10fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville * Unless required by applicable law or agreed to in writing, software
11fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville * distributed under the License is distributed on an "AS IS" BASIS,
12fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville * See the License for the specific language governing permissions and
14fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville * limitations under the License.
15fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville */
16fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville
17fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville#ifndef ANDROID_BITMAP_H
18fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville#define ANDROID_BITMAP_H
19fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville
20fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville#include <stdint.h>
21fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville#include <jni.h>
22fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville
23583eaaa57c51b28bf14da2a5cc94a2e6091cccf5Wink Saville#ifdef __cplusplus
24fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Savilleextern "C" {
25fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville#endif
26583eaaa57c51b28bf14da2a5cc94a2e6091cccf5Wink Saville
27583eaaa57c51b28bf14da2a5cc94a2e6091cccf5Wink Saville#define ANDROID_BITMAP_RESULT_SUCCESS            0
2854b1b1a07ad3edd1df060889aad453aa0e1cc79aWink Saville#define ANDROID_BITMAP_RESULT_BAD_PARAMETER     -1
29fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville#define ANDROID_BITMAP_RESULT_JNI_EXCEPTION     -2
30583eaaa57c51b28bf14da2a5cc94a2e6091cccf5Wink Saville#define ANDROID_BITMAP_RESULT_ALLOCATION_FAILED -3
31efcc3d35661c0cd978bb2b2f808fade4c4734e21Wink Saville
32fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Savilleenum AndroidBitmapFormat {
33d3059487abd526b91b912f70939c1c6994eecf52Wink Saville    ANDROID_BITMAP_FORMAT_NONE      = 0,
34fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville    ANDROID_BITMAP_FORMAT_RGBA_8888 = 1,
35fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville    ANDROID_BITMAP_FORMAT_RGB_565   = 4,
36fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville    ANDROID_BITMAP_FORMAT_RGBA_4444 = 7,
37fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville    ANDROID_BITMAP_FORMAT_A_8       = 8,
3864c42cae4482fe0157e977b8ddd0f2c2436b3f31Wink Saville};
3933c54e3365d621fcc5b9f7564f18b33dc1e300dfWink Saville
4058c73c3f76c231cf128041aefadd4b6a6bcefac2Wink Savilletypedef struct {
4164c42cae4482fe0157e977b8ddd0f2c2436b3f31Wink Saville    uint32_t    width;
4233c54e3365d621fcc5b9f7564f18b33dc1e300dfWink Saville    uint32_t    height;
43fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville    uint32_t    stride;
44fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville    int32_t     format;
45fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville    uint32_t    flags;      // 0 for now
46fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville} AndroidBitmapInfo;
47fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville
4833c54e3365d621fcc5b9f7564f18b33dc1e300dfWink Saville/**
49fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville * Given a java bitmap object, fill out the AndroidBitmap struct for it.
5033c54e3365d621fcc5b9f7564f18b33dc1e300dfWink Saville * If the call fails, the info parameter will be ignored
51fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville */
52fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Savilleint AndroidBitmap_getInfo(JNIEnv* env, jobject jbitmap,
53cea056f5894543819898a0e62f98dc7870b27758Wink Saville                          AndroidBitmapInfo* info);
54cea056f5894543819898a0e62f98dc7870b27758Wink Saville
55cea056f5894543819898a0e62f98dc7870b27758Wink Saville/**
56cea056f5894543819898a0e62f98dc7870b27758Wink Saville * Given a java bitmap object, attempt to lock the pixel address.
57cea056f5894543819898a0e62f98dc7870b27758Wink Saville * Locking will ensure that the memory for the pixels will not move
58cea056f5894543819898a0e62f98dc7870b27758Wink Saville * until the unlockPixels call, and ensure that, if the pixels had been
59cea056f5894543819898a0e62f98dc7870b27758Wink Saville * previously purged, they will have been restored.
60cea056f5894543819898a0e62f98dc7870b27758Wink Saville *
61fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville * If this call succeeds, it must be balanced by a call to
62fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville * AndroidBitmap_unlockPixels, after which time the address of the pixels should
63fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville * no longer be used.
64fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville *
65fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville * If this succeeds, *addrPtr will be set to the pixel address. If the call
6633c54e3365d621fcc5b9f7564f18b33dc1e300dfWink Saville * fails, addrPtr will be ignored.
67a4f3bec29c85ef9e0d07fdd551fe3c50f28b9adcWink Saville */
68fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Savilleint AndroidBitmap_lockPixels(JNIEnv* env, jobject jbitmap, void** addrPtr);
69fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville
70fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville/**
7133c54e3365d621fcc5b9f7564f18b33dc1e300dfWink Saville * Call this to balanace a successful call to AndroidBitmap_lockPixels
72fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville */
7333c54e3365d621fcc5b9f7564f18b33dc1e300dfWink Savilleint AndroidBitmap_unlockPixels(JNIEnv* env, jobject jbitmap);
74fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville
75a4f3bec29c85ef9e0d07fdd551fe3c50f28b9adcWink Saville#ifdef __cplusplus
76a4f3bec29c85ef9e0d07fdd551fe3c50f28b9adcWink Saville}
7733c54e3365d621fcc5b9f7564f18b33dc1e300dfWink Saville#endif
78fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville
7933c54e3365d621fcc5b9f7564f18b33dc1e300dfWink Saville#endif
80fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville