【问题标题】:NDK - Create 16 bit rgb struct in C++NDK - 在 C++ 中创建 16 位 rgb 结构
【发布时间】:2016-11-26 21:49:53
【问题描述】:

我想在 C++ 中创建一个这样的结构,用于 ARGB_8888 格式:

typedef struct
{
    uint8_t alpha;
    uint8_t red;
    uint8_t green;
    uint8_t blue;
} argb;

但对于 RGB_565 格式,即 R 和 B:各 5 位,G:6 位。

【问题讨论】:

  • 是否有特殊原因不能将它们保留为 8 位整数而简单地忽略不需要的最高位?

标签: android c++ image-processing android-ndk java-native-interface


【解决方案1】:

尝试使用位域。语法如下:

typedef struct
{
    uint8_t alpha;
    uint8_t red:5;
    uint8_t green:6;
    uint8_t blue:5;
} argb;

这可能无法完全按照您的预期工作,具体取决于此代码所针对的机器。

请参阅此链接中的“6. 位域”部分: structure-packing

【讨论】:

  • 谢谢,我的代码将在安卓设备上运行。这会在他们身上按预期工作吗?
  • 不确定。我对 Android 设备不是很熟悉,也不太了解这种结构打包方法是如何工作的。如果我不得不猜测,我认为这会起作用,因为 5+6+5=16 位正好是 2 个字节。如果它不是一个确切的字节数,那么就会浪费空间。
  • 尝试打印 sizeof(argb) 并查看它给出的数字。它返回的数字将是结构类型 argb 的字节大小。如果结构打包方法有效,这将是 3 个字节。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-03
  • 2017-02-13
  • 1970-01-01
  • 2011-07-09
  • 2011-07-17
  • 1970-01-01
  • 2012-01-26
相关资源
最近更新 更多