Bitmap

摘要

枚举

匿名枚举 21{
  ANDROID_BITMAP_RESULT_SUCCESS = 0,
  ANDROID_BITMAP_RESULT_BAD_PARAMETER = -1,
  ANDROID_BITMAP_RESULT_JNI_EXCEPTION = -2,
  ANDROID_BITMAP_RESULT_ALLOCATION_FAILED = -3
}
枚举
AndroidBitmap 函数结果代码。
匿名枚举 22{
  ANDROID_BITMAP_FLAGS_ALPHA_PREMUL = 0,
  ANDROID_BITMAP_FLAGS_ALPHA_OPAQUE = 1,
  ANDROID_BITMAP_FLAGS_ALPHA_UNPREMUL = 2,
  ANDROID_BITMAP_FLAGS_ALPHA_MASK = 0x3,
  ANDROID_BITMAP_FLAGS_ALPHA_SHIFT = 0
}
枚举
Bitmap alpha 格式。
匿名枚举 23{
  ANDROID_BITMAP_FLAGS_IS_HARDWARE = 1 << 31
}
枚举
AndroidBitmapCompressFormat{
  ANDROID_BITMAP_COMPRESS_FORMAT_JPEG = 0,
  ANDROID_BITMAP_COMPRESS_FORMAT_PNG = 1,
  ANDROID_BITMAP_COMPRESS_FORMAT_WEBP_LOSSY = 3,
  ANDROID_BITMAP_COMPRESS_FORMAT_WEBP_LOSSLESS = 4
}
枚举
指定可以使用 AndroidBitmap_compress 压缩到的格式。
AndroidBitmapFormat{
  ANDROID_BITMAP_FORMAT_NONE = 0,
  ANDROID_BITMAP_FORMAT_RGBA_8888 = 1,
  ANDROID_BITMAP_FORMAT_RGB_565 = 4,
  ANDROID_BITMAP_FORMAT_RGBA_4444 = 7,
  ANDROID_BITMAP_FORMAT_A_8 = 8,
  ANDROID_BITMAP_FORMAT_RGBA_F16 = 9,
  ANDROID_BITMAP_FORMAT_RGBA_1010102 = 10
}
枚举
Bitmap 像素格式。

类型定义 (Typedefs)

AHardwareBuffer 类型定义
结构体 AHardwareBuffer
AndroidBitmap_CompressWriteFunc)(void *userContext, const void *data, size_t size) 类型定义
bool(*
用于写入压缩输出的用户定义函数。

函数 (Functions)

AndroidBitmap_compress(const AndroidBitmapInfo *info, int32_t dataspace, const void *pixels, int32_t format, int32_t quality, void *userContext, AndroidBitmap_CompressWriteFunc fn)
int
按照 info 的描述压缩 pixels
AndroidBitmap_getDataSpace(JNIEnv *env, jobject jbitmap)
int32_t
给定一个 java bitmap 对象,返回其 ADataSpace
AndroidBitmap_getHardwareBuffer(JNIEnv *env, jobject bitmap, AHardwareBuffer **outBuffer)
int
检索与 HARDWARE Bitmap 相关的原生对象。
AndroidBitmap_getInfo(JNIEnv *env, jobject jbitmap, AndroidBitmapInfo *info)
int
给定一个 java bitmap 对象,为其填充 AndroidBitmapInfo 结构体。
AndroidBitmap_lockPixels(JNIEnv *env, jobject jbitmap, void **addrPtr)
int
给定一个 java bitmap 对象,尝试锁定像素地址。
AndroidBitmap_unlockPixels(JNIEnv *env, jobject jbitmap)
int
调用此函数以平衡对 AndroidBitmap_lockPixels 的成功调用。

结构体 (Structs)

AndroidBitmapInfo

Bitmap 信息,请参阅 AndroidBitmap_getInfo()

枚举

匿名枚举 21

android/bitmap.h 中声明
 Anonymous Enum 21

AndroidBitmap 函数结果代码。

属性 (Properties)
ANDROID_BITMAP_RESULT_ALLOCATION_FAILED

分配失败。

ANDROID_BITMAP_RESULT_BAD_PARAMETER

参数错误。

ANDROID_BITMAP_RESULT_JNI_EXCEPTION

发生 JNI 异常。

ANDROID_BITMAP_RESULT_SUCCESS

操作成功。

匿名枚举 22

android/bitmap.h 中声明
 Anonymous Enum 22

Bitmap alpha 格式。

属性 (Properties)
ANDROID_BITMAP_FLAGS_ALPHA_MASK

用于隔离 alpha 的 AndroidBitmapFormat.flags 位掩码。

ANDROID_BITMAP_FLAGS_ALPHA_OPAQUE

像素不透明。

ANDROID_BITMAP_FLAGS_ALPHA_PREMUL

像素分量已预乘 alpha。

ANDROID_BITMAP_FLAGS_ALPHA_SHIFT

用于隔离 alpha 的 AndroidBitmapFormat.flags 偏移。

ANDROID_BITMAP_FLAGS_ALPHA_UNPREMUL

像素分量与 alpha 无关。

匿名枚举 23

android/bitmap.h 中声明
 Anonymous Enum 23
属性 (Properties)
ANDROID_BITMAP_FLAGS_IS_HARDWARE

如果在 AndroidBitmapInfo.flags 中设置此位,则 Bitmap 使用 HARDWARE Config,并且可以通过 AndroidBitmap_getHardwareBuffer 检索其 AHardwareBuffer

AndroidBitmapCompressFormat

android/bitmap.h 中声明
 AndroidBitmapCompressFormat

指定可以使用 AndroidBitmap_compress 压缩到的格式。

属性 (Properties)
ANDROID_BITMAP_COMPRESS_FORMAT_JPEG

压缩为 JPEG 格式。

质量为 0 表示压缩到最小尺寸。100 表示压缩到最大视觉质量。

ANDROID_BITMAP_COMPRESS_FORMAT_PNG

压缩为 PNG 格式。

PNG 是无损格式,因此质量被忽略。

ANDROID_BITMAP_COMPRESS_FORMAT_WEBP_LOSSLESS

压缩为 WEBP 无损格式。

质量是指压缩所需投入的精力。值为 0 表示快速压缩,导致文件大小相对较大。100 表示花费更多时间压缩,导致文件较小。

ANDROID_BITMAP_COMPRESS_FORMAT_WEBP_LOSSY

压缩为 WEBP 有损格式。

质量为 0 表示压缩到最小尺寸。100 表示压缩到最大视觉质量。

AndroidBitmapFormat

android/bitmap.h 中声明
 AndroidBitmapFormat

Bitmap 像素格式。

属性 (Properties)
ANDROID_BITMAP_FORMAT_A_8

Alpha: 8 位。

ANDROID_BITMAP_FORMAT_NONE

无格式。

ANDROID_BITMAP_FORMAT_RGBA_1010102

红色: 10 位,绿色: 10 位,蓝色: 10 位,Alpha: 2 位。

ANDROID_BITMAP_FORMAT_RGBA_4444

在 API 级别 13 中已弃用。

由于此配置质量较差,建议改用 ARGB_8888。

ANDROID_BITMAP_FORMAT_RGBA_8888

红色: 8 位,绿色: 8 位,蓝色: 8 位,Alpha: 8 位。

ANDROID_BITMAP_FORMAT_RGBA_F16

每个分量存储为半浮点数。

ANDROID_BITMAP_FORMAT_RGB_565

红色: 5 位,绿色: 6 位,蓝色: 5 位。

类型定义 (Typedefs)

AHardwareBuffer

android/bitmap.h 中声明
struct AHardwareBuffer AHardwareBuffer

AndroidBitmap_CompressWriteFunc

android/bitmap.h 中声明
bool(* AndroidBitmap_CompressWriteFunc)(void *userContext, const void *data, size_t size)

用于写入压缩输出的用户定义函数。

自 API 级别 30 起可用。

详细信息
参数
userContext
指向传递给 AndroidBitmap_compress 的用户定义数据的指针。
data
要写入的、长度为 size 字节的压缩数据。
size
要写入的数据的长度(字节)。
返回值
操作是否成功。

函数 (Functions)

AndroidBitmap_compress

android/bitmap.h 中声明
int AndroidBitmap_compress(
  const AndroidBitmapInfo *info,
  int32_t dataspace,
  const void *pixels,
  int32_t format,
  int32_t quality,
  void *userContext,
  AndroidBitmap_CompressWriteFunc fn
)

按照 info 的描述压缩 pixels

自 API 级别 30 起可用。

详细信息
参数
info
待压缩像素的描述。
dataspace
描述像素颜色空间的 ADataSpace
pixels
指向待压缩像素的指针。
format
要压缩到的 AndroidBitmapCompressFormat
quality
给压缩器的提示,范围为 0-100。该值的解释因 AndroidBitmapCompressFormat 而异。
userContext
用户定义的数据,每次调用提供的 AndroidBitmap_CompressWriteFunc 时都会传递给它。可以为 null。
fn
写入压缩数据的函数。每当压缩器有更多准备写入的压缩数据时,都会调用此函数。对于此方法的每次调用,可能会被调用多次。不能为空。
返回值
AndroidBitmap 函数结果代码。

AndroidBitmap_getDataSpace

android/bitmap.h 中声明
int32_t AndroidBitmap_getDataSpace(
  JNIEnv *env,
  jobject jbitmap
)

给定一个 java bitmap 对象,返回其 ADataSpace

请注意,ADataSpace 仅公开了少数几个值。即使对于命名颜色空间,如果它们没有对应的 ADataSpace,此函数也可能返回 ADATASPACE_UNKNOWN

自 API 级别 30 起可用。

AndroidBitmap_getHardwareBuffer

android/bitmap.h 中声明
int AndroidBitmap_getHardwareBuffer(
  JNIEnv *env,
  jobject bitmap,
  AHardwareBuffer **outBuffer
)

检索与 HARDWARE Bitmap 相关的原生对象。

当 Bitmap 正在封装它时,客户端不得修改它。

自 API 级别 30 起可用。

详细信息
参数
env
JNI 环境指针的句柄。
bitmap
android.graphics.Bitmap 的句柄。
outBuffer
成功时,将设置为指向与 bitmap 关联的 AHardwareBuffer 的指针。这将获取对缓冲区的引用,客户端在使用完毕后必须调用 AHardwareBuffer_release
返回值
AndroidBitmap 函数结果代码。ANDROID_BITMAP_RESULT_BAD_PARAMETER 如果 bitmap 不是 HARDWARE Bitmap。

AndroidBitmap_getInfo

android/bitmap.h 中声明
int AndroidBitmap_getInfo(
  JNIEnv *env,
  jobject jbitmap,
  AndroidBitmapInfo *info
)

给定一个 java bitmap 对象,为其填充 AndroidBitmapInfo 结构体。

如果调用失败,则 info 参数将被忽略。

AndroidBitmap_lockPixels

android/bitmap.h 中声明
int AndroidBitmap_lockPixels(
  JNIEnv *env,
  jobject jbitmap,
  void **addrPtr
)

给定一个 java bitmap 对象,尝试锁定像素地址。

锁定将确保像素的内存不会移动,直到调用 unlockPixels,并确保如果像素先前已被清除,它们将被恢复。

如果此调用成功,则必须通过调用 AndroidBitmap_unlockPixels 进行平衡,在此之后,像素的地址不应再使用。

如果成功,*addrPtr 将设置为像素地址。如果调用失败,则 addrPtr 将被忽略。

AndroidBitmap_unlockPixels

android/bitmap.h 中声明
int AndroidBitmap_unlockPixels(
  JNIEnv *env,
  jobject jbitmap
)

调用此函数以平衡对 AndroidBitmap_lockPixels 的成功调用。