作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在处理 RGB_565 位图时遇到问题。我的代码适用于 ARGB_8888:以下是我用于 ARGB_8888 的一些代码 fragment (效果很好):
typedef struct
{
uint8_t red;
uint8_t green;
uint8_t blue;
uint8_t alpha;
} argb;
.....
.....
void* pixelscolor;
int ret;
int y;
int x;
uint32_t *pixel;
if ((ret = AndroidBitmap_getInfo(env, bmp, &infocolor)) < 0) {
//return null;
}
if ((ret = AndroidBitmap_lockPixels(env, bmp, &pixelscolor)) < 0) {
}
int width = infocolor.width;
int height = infocolor.height;
for (y = 0; y < height; y++) {
argb * line = (argb *) pixelscolor;
for (int n = 0; n < width; n++) {
int newValue = line[n].alpha+line[n].red+line[n].green+line[n].blue;
......
....
我得到这样的结果 ARGB_8888 results .
但是在尝试 RGB_565 格式时:
typedef struct
{
uint8_t red;
uint8_t green;
uint8_t blue;
} rgb;
.....
.....
void* pixelscolor;
int ret;
int y;
int x;
uint32_t *pixel;
if ((ret = AndroidBitmap_getInfo(env, bmp, &infocolor)) < 0) {
//return null;
}
if ((ret = AndroidBitmap_lockPixels(env, bmp, &pixelscolor)) < 0) {
}
int width = infocolor.width;
int height = infocolor.height;
for (y = 0; y < height; y++) {
rgb * line = (rgb *) pixelscolor;
for (int n = 0; n < width; n++) {
int newValue = line[n].red+line[n].green+line[n].blue;
......
....
我得到以下结果:RGB_565 result
最佳答案
RGB_565
每个像素仅使用 2 个字节,即 16 位:
1 1
5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| red | green | blue |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
所以要访问单独的颜色 channel ,您可以使用下一个代码:
uint16_t u16_pix;
red = (u16_pix >> 11) & 0x1f;
green = (u16_pix >> 5) & 0x3f;
blue = (u16_pix >> 0) & 0x1f;
设置它们:
u16_pix = (red << 11) | (green << 5) | (blue);
请注意,您必须确保颜色 channel 值必须符合其限制,即
red: 0 to 31
green: 0 to 63
blue: 0 to 31
关于android - 在 NDK 中处理 RGB_565 位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38541909/
我是一名优秀的程序员,十分优秀!