怎样用C语言绘制直线

Python017

怎样用C语言绘制直线,第1张

1.void far line(int x0, int y0, int x1, int y1)

画一条从点(x0, y0)到(x1, y1)的直线

2.void far lineto(int x, int y)

画一作从现行游标到点(x, y)的直线。

3.void far linerel(int dx, int dy)

画一条从现行游标(x, y)到按相对增量确定的点(x+dx, y+dy)的直线。

framebuffer(帧缓冲)。

帧的最低数量为24(人肉眼可见)(低于24则感觉到画面不流畅)。

显卡与帧的关系:由cpu调节其数据传输速率来输出其三基色的配比。

三基色:RGB(红绿蓝)。

在没有桌面和图形文件的系统界面,可以通过C语言的编程来实现在黑色背景上画图!

用下面的代码,在需要的地方(有注释)适当修改,就能画出自己喜欢的图形!

PS:同样要编译运行后才能出效果。

#include <stdio.h>

#include <sys/mman.h>

#include <fcntl.h>

#include <linux/fb.h>

#include <stdlib.h>

#define RGB888(r,g,b) ((r &0xff) <<16 | (g &0xff) <<8 | (b &0xff))

#define RGB565(r,g,b) ((r &0x1f) <<11 | (g &0x3f) <<5 | (b &0x1f))

int main()

{

int fd = open("/dev/fb0", O_RDWR)

if(fd <0){

perror("open err. \n")

exit(EXIT_FAILURE)

printf("xres: %d\n", info.xres)

printf("yres: %d\n", info.yres)

printf("bits_per_pixel: %d\n", info.bits_per_pixel)

size_t len = info.xres*info.yres*info.bits_per_pixel >>3

unsigned long* addr = NULL

addr = mmap(NULL, len, PROT_WRITE|PROT_READ, MAP_SHARED, fd, 0)

if(addr == (void*)-1){

perror("mmap err. \n")

<graphics.h>是TC下使用的库

建立MFC文件,添加菜单“功能性按键”时选择“CVIEW”

函数内容如下(我用的Visual studio 2010,可能有些版本不同导致操作不同)

CDC*pDC=GetDC()//得到绘图类指针

RedrawWindow()//重建窗口

pDC->Rectangle(50,20,700,400)//以默认画笔画一矩形

CPen bluepen(PS_DASH,1,RGB(0,0,255))//创建画虚线,线宽为1的蓝色画笔

CPen*old=pDC->SelectObject(&bluepen)

pDC->Ellipse(100,50,250,200)//画圆

CPen redpen(PS_SOLID,2,RGB(255,0,0))//创建画实线,线宽为2的红色画笔

pDC->SelectObject(&redpen)

pDC->Ellipse(500,50,650,200)//画圆

pDC->MoveTo(375,100)//画一三角形

pDC->LineTo(225,300)

pDC->LineTo(525,300)

pDC->LineTo(375,100)

CBrush greenBrush(RGB(0,255,0))//创建纯色的绿色画笔刷

pDC->SelectObject(&greenBrush)

pDC->FloodFill(375,200,RGB(255,0,0))//以纯色绿笔刷填充三角形

CBrush green1Brush(HS_FDIAGONAL,RGB(0,255,0))//创建影线为斜线的绿色笔刷

pDC->SelectObject(&green1Brush)

pDC->FloodFill(600,150,RGB(255,0,0))//以绿色斜线笔刷填充圆

pDC->SelectObject(old)//释放创建的画笔,回复原来的画笔

pDC->TextOut(335,250,"HELLO WORLD,It's my first computer graphic work!")//输出字符

ReleaseDC(pDC)//释放创建的CDC对象