Rayfox 发表于 2006-12-19 10:27:11

Framebuffer的16位色,RBG是怎样排列的?

Framebuffer的16位色,RBG是怎样排列的?

asmcos 发表于 2006-12-19 13:02:03

一般都是 5-6-5 r,b 都是5位. G是6位

Rayfox 发表于 2006-12-22 09:57:28

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <asm/page.h>
#include <linux/fb.h>

int fb;
struct fb_var_screeninfo vinfo;
struct fb_fix_screeninfo finfo;
typedef struct {
        unsigned char r;
        unsigned char g;
        unsigned char b;
}rgb_t;
unsigned long screen_size;
unsigned char * lpScreenMem;

int main(int argc, char ** argv)
{
        int i, j;
        rgb_t rgb;
        fb = open("/dev/fb0", O_RDWR);
        if (fb < 0) {
                fprintf(stderr, "open /dev/fb0 error!\n");
                return -1;
        }
        if (ioctl(fb, FBIOGET_VSCREENINFO, &vinfo)) {
                fprintf(stderr, "error get var screeninfo!\n");
                return -1;
        }
        printf("%dx%d %dbpp\n", vinfo.xres, vinfo.yres, vinfo.bits_per_pixel);
        screen_size = vinfo.xres * vinfo.yres * (vinfo.bits_per_pixel / 8);
        lpScreenMem = (unsigned char *)mmap(0, screen_size, PROT_READ | PROT_WRITE, MAP_SHARED, fb, 0);
        if (lpScreenMem == -1) {
                return -1;
        }
        rgb.r = 0xff;
        rgb.g = 0x00;
        rgb.b = 0x00;
        for (i = 0;i < 100;i ++) {
                //draw_point(0, i, rgb);
                for (j = 0;j < 100;j ++) {
                        draw_point(i, j, rgb);
                }
        }
        close(fb);
}

void draw_point(int x, int y, rgb_t rgb)
{
        unsigned short * lpMem = (unsigned short *)(lpScreenMem + (x + y * vinfo.xres * 2));
        *lpMem = (unsigned short)((((unsigned short)rgb.r & 0x1f) << 11) + (((unsigned short)rgb.g & 0x3f) << 5) + (unsigned short)rgb.b);
}

我的颜色老是设置不对,你看看那里有错,先谢谢了!

Rayfox 发表于 2006-12-22 10:49:06

我知道是那里错了,谢谢你了!
把lpScreenMem + (x + y * vinfo.xres * 2)改成
lpScreenMem + (x + y * vinfo.xres) * 2就对了!
页: [1]
查看完整版本: Framebuffer的16位色,RBG是怎样排列的?