免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1121 | 回复: 0
打印 上一主题 下一主题

Framebuffer画点 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-01-07 12:40 |只看该作者 |倒序浏览

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define TRUE    1
#define FALSE   0
#define MIN(x,y)        ((x)>(y)?(y):(x))
#define MAX(x,y)        ((x)>(y)?(x):(y))
typedef struct fbdev{
        int fb;
        unsigned long fb_mem_offset;
        unsigned long fb_mem;
        struct fb_fix_screeninfo fb_fix;
        struct fb_var_screeninfo fb_var;
        char dev[20];
} FBDEV, *PFBDEV;
typedef struct point{
        int x;
        int y;
        int z;
} POINT, *PPOINT;
/* These math function Writed by
* kf701
* 2007-04-05 HeFei
*/
void draw_dot (PFBDEV pFbdev, POINT p, uint8_t r, uint8_t g, uint8_t b);
void draw_line(PFBDEV pFbdev, POINT p1, POINT p2, uint8_t r, uint8_t g, uint8_t b);
void draw_polygon(PFBDEV pFbdev, uint32_t num, PPOINT array, uint8_t r, uint8_t g, uint8_t b);
void draw_triangle(PFBDEV pFbdev, POINT p1, POINT p2, POINT p3, uint8_t r, uint8_t g, uint8_t b);
void draw_circle(PFBDEV pFbdev, POINT center, uint32_t radius, uint8_t r, uint8_t g, uint8_t b);
void draw_parabola_x(PFBDEV pFbdev, POINT center, int a, uint8_t r, uint8_t g, uint8_t b);
void draw_parabola_y(PFBDEV pFbdev, POINT center, int a, uint8_t r, uint8_t g, uint8_t b);
int fb_open(PFBDEV pFbdev)
{
        pFbdev->fb = open(pFbdev->dev, O_RDWR);
        if(pFbdev->fb dev);
                return FALSE;
        }
        if (-1 == ioctl(pFbdev->fb,FBIOGET_VSCREENINFO,&(pFbdev->fb_var)))
        {
                printf("ioctl FBIOGET_VSCREENINFO\n");
                return FALSE;
        }
        if (-1 == ioctl(pFbdev->fb,FBIOGET_FSCREENINFO,&(pFbdev->fb_fix)))
        {
                printf("ioctl FBIOGET_FSCREENINFO\n");
                return FALSE;
        }
        pFbdev->fb_mem_offset = (unsigned long)(pFbdev->fb_fix.smem_start) & (~PAGE_MASK);
        pFbdev->fb_mem = (unsigned long int)mmap(NULL, pFbdev->fb_fix.smem_len +
                        pFbdev->fb_mem_offset,
                        PROT_READ | PROT_WRITE, MAP_SHARED, pFbdev->fb, 0);
        if (-1L == (long) pFbdev->fb_mem)
        {
                printf("mmap error! mem:%ld offset:%ld\n", pFbdev->fb_mem,
                                pFbdev->fb_mem_offset);
                return FALSE;
        }
/*
        printf("depth(bits per pixel) = %d\n",fb.fb_var.bits_per_pixel);
        printf("smemlen = %d\n",fb.fb_fix.smem_len);
        printf("fix_line(in byte) = %d\n",fb.fb_fix.line_length);
*/
        return TRUE;
}
void fb_close(PFBDEV pFbdev)
{
        close(pFbdev->fb);
        pFbdev->fb=-1;
}
void fb_memcpy(void *addr, void *color, size_t len)
{
        memcpy(addr, color, len);
}
void draw_dot (PFBDEV pFbdev, POINT p, uint8_t r, uint8_t g, uint8_t b)
{
        uint32_t offset;
        uint8_t color[4];
        color[0] = b;
        color[1] = g;
        color[2] = r;
        color[3] = 0x0;
        offset = p.y*pFbdev->fb_fix.line_length+4*p.x;
        fb_memcpy((void*)(pFbdev->fb_mem + pFbdev->fb_mem_offset + offset), color, 4);
}
void draw_line(PFBDEV pFbdev, POINT p1, POINT p2, uint8_t r, uint8_t g, uint8_t b)
{
        POINT p;
        int x,y;
        for( x=MIN(p1.x,p2.x); x=0; i--)
        {
                draw_circle(&fb, center, i, 0xff, 0xff, 0x0);
        }
*/
        center.x = 700;
        center.y = 250;
        int a = -100;
        draw_parabola_x(&fb, center, a, 0x0, 0xff, 0x0);
        draw_parabola_x(&fb, center, -a, 0x0, 0xff, 0x0);
        draw_parabola_y(&fb, center, a, 0x0, 0xff, 0x0);
        draw_parabola_y(&fb, center, -a, 0x0, 0xff, 0x0);
        fb_close(&fb);
        return 0;
}

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/90065/showart_1779372.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP