在NDK中处理RGB_565位图

切利里

我在处理RGB_565位图时遇到问题。我的代码适用于ARGB_8888:以下是一些我用于ARGB_8888的代码段(适用于某些情况):

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结果

但是,当尝试使用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结果

塞尔吉奥

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   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

因此,要访问单独的颜色通道,可以使用下一个代码:

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);

注意,必须确保颜色通道值必须符合其限制,即

red:   0 to 31
green: 0 to 63
blue:  0 to 31

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在NDK中处理RGB_565位图

来自分类Dev

通过毕加索使用RGB_565加载位图

来自分类Dev

24位图图像和16位图图像中的RGB颜色

来自分类Dev

NDK-从ARGB_8888位图中处理不带Alpha的RGB值

来自分类Dev

NDK-从ARGB_8888位图中处理不带Alpha的RGB值

来自分类Dev

在Android中处理ALPHA_8位图并在ImageView中显示

来自分类Dev

读取Java中的16位位图

来自分类Dev

正确地将24位位图数据加载到32位位图对象中

来自分类Dev

倾斜的位图,RGB565 C#的步幅计算

来自分类Dev

混合2位图

来自分类Dev

RGB 565-为什么6位为绿色

来自分类Dev

将位图转换为1位位图

来自分类Dev

Antroid 5位图绘制麻烦

来自分类Dev

Antroid 5位图绘制麻烦

来自分类Dev

如何在位图int数组与UIImage之间进行转换(rgb565)

来自分类Dev

Android-将2位图保存到一个图像文件中

来自分类Dev

如何使用BufferedImage对象创建1位位图?

来自分类Dev

将32位位图添加到ImageList

来自分类Dev

尝试更改24位位图的RGBQUAD时出错

来自分类Dev

将32位位图添加到ImageList

来自分类Dev

使用来自其他32位位图的Alpha通道合成新的32位位图

来自分类Dev

Windows Phone 8位图分配使我的相机应用程序中的所有内容崩溃

来自分类Dev

OpenGL FreeType2位图无法渲染

来自分类Dev

是否需要x11位图字体?

来自分类Dev

是否需要x11位图字体?

来自分类Dev

如何在画布上绘制3位图

来自分类Dev

RGB565为灰度

来自分类Dev

如何处理 1 位和 4 位图像?

来自分类Dev

处理中的多图