linux图像显示(一)framebuffer操作

linux图像显示

linux图像显示(一)framebuffer操作

linux图像显示(二)bmp图片

linux图像显示(三)使用libjpg处理jpg图片

linux图像显示(四)使用libpng处理png图片

linux图像显示(五)使用freetype处理矢量字体

 

下面给了一个linux下操作framebuffer的示例代码,如果要显示图片,只需要调用fb_draw_back函数,将RGB像素点一个一个写到framebuffer即可。

static unsigned int *gp_fb;
static int g_fd;

int fb_open(void)
{
    int ret = -1;
	
    struct fb_fix_screeninfo finfo;
    struct fb_var_screeninfo vinfo;

    memset(&finfo, 0, sizeof(finfo));
    memset(&vinfo, 0, sizeof(vinfo));

    /* 第1步:打开设备 */
    g_fd = open(FBDEVICE, O_RDWR);
    if (g_fd < 0)
    {
        perror("open");
        return -1;
    }

    /* 第2步:获取设备的硬件信息,如屏幕分辨率,颜色位深等信息 */
    ret = ioctl(g_fd, FBIOGET_FSCREENINFO, &finfo);
    if (ret < 0)
    {
        perror("ioctl");
        return -1;
    }

    ret = ioctl(g_fd, FBIOGET_VSCREENINFO, &vinfo);
    if (ret < 0)
    {
        perror("ioctl");
        return -1;
    }

    /* 第3步:进行mmap,申请fb */
    unsigned long len = vinfo.xres_virtual * vinfo.yres_virtual *     \
                                                    vinfo.bits_per_pixel / 8;

    gp_fb = mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_SHARED, g_fd, 0);

    if (NULL == gp_fb)
    {
        perror("mmap");
        return -1;
    }
}

/* 经过内存映射之后,我们可以写 gp_fb指向的内存 来操控framebuffer */
void fb_draw_back(unsigned int width, unsigned int height, unsigned int color)
{
	unsigned int x, y;
	
	for (y = 0; y < height; y++)
	{
		for (x = 0; x < width; x++)
		{
			*(gp_fb + y * WIDTH + x) = color;
		}
	}
}





 

你可能感兴趣的:(linux图像显示(一)framebuffer操作)