C语言如何画图

Python031

C语言如何画图,第1张

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

你要什么图像 sin 还cos 要不我都给你把!

1、#include<stdio.h>

#include<math.h>

void main()

{

double y

int i,n

for(y=1y>=0y-=0.1)

{n=asin(y)*10

for(i=1i<=ni++)

printf(" ")

printf("*")

for(i<=31-ni++)

printf(" ")

printf("*\n")}

for(y=0y<=1y+=0.1)

{n=asin(y)*10

for(i=-1i<=31+ni++)

printf(" ")

printf("*")

for(i<=62-ni++)

printf(" ")

printf("*\n")}

}

2、#include<stdio.h>

#include<math.h>

void main()

{

double y

int x,m

for(y=1y>=-1y-=0.1)

{m=acos(y)*10

for(x=1x<mx++)

printf(" ")

printf("*")

for(x<62-mx++)

printf(" ")

printf("*\n")}

}

之后在给你个连个图像相交的把

3、#include<stdio.h>

#include<math.h>

void main()

{

double y

int n,m,i,j,x,yy

for(yy=0yy<=20yy++)

{ y=0.1*yy

m=acos(1-y)*10

n=asin(1-y)*10

i=32+asin(y-1)*10

j=61-asin(y-1)*10

for(x=0x<62x++)

{if((x==n)&&(x==m)) printf("+")

else if((x==n)||(x==i)||(x==j)) printf("+")

else if((x==m)||(x==62-m)) printf("*")

else printf(" ")}

printf("\n")

}

}

http://bbs.zdnet.com.cn/thread-303145-1-1.html

II、设定线型函数

在没有对线的特性进行设定之前,TURBO C 用其默认值,即一点宽的实线,但TURBO C 也提供了可以改变线型的函数

线型包括:宽度和形状。其中宽度只有两种选择:一点宽和三点宽。而线的形状则有五种。

下面介绍有关线型的设置函数。

void far setlinestyle(int linestyle,unsigned upattern,int thickness)该函数用来设置线的有关信息,其中linestyle是线形状的规定,见下表。

有关线的形状(linestyle)

http://bbs.zdnet.com.cn/thread-303145-1-1.html

━━━━━━━━━━━━━━━━━━━━━━━━━

符号常数 数值 含义

—————————————————————————

SOLID_LINE 0 实线

DOTTED_LINE 1 点线

CENTER_LINE 2 中心线

DASHED_LINE 3 点画线

USERBIT_LINE 4 用户定义线

━━━━━━━━━━━━━━━━━━━━━━━━━

thickness是线的宽度,见下表。

有关线宽(thickness)

━━━━━━━━━━━━━━━━━━━━━━━━━

符号常数 数值 含义

—————————————————————————

NORM_WIDTH 1 一点宽

THIC_WIDTH 3 三点宽

━━━━━━━━━━━━━━━━━━━━━━━━━

对于upattern,只有linestyle选USERBIT_LINE 时才有意义 (选其它线型,uppattern取0即可)。此时uppattern的16位二进制数的每一位代表一个象元,如果那位为1,则该象元打开,否则该象元关闭。

void far getlinesettings(struct linesettingstypefar *lineinfo)该函数将有关线的信息存放到由lineinfo 指向的结构中,表中linesettingstype的结构如下:

struct linesettingstype{

int linestyle

unsigned upattern

int thickness

}

例如下面两句程序可以读出当前线的特性

struct linesettingstype *info

getlinesettings(info)

void far setwritemode(int mode)该函数规定画线的方式。如果mode=0,则表示画线时将所画位置的原来信息覆盖了(这是TURBO C的默认方式)。如果mode=1, 则表示画线时用现在特性的线与所画之处原有的线进行异或(XOR)操作, 实际上画出的线是原有线与现在规定的线进行异或后的结果。因此,当线的特性不变,进行两次画线操作相当于没有画线。

有关线型设定和画线函数的例子如下所示。

#include<stdlib.h>

#include<graphics.h>

int main()

{

int gdriver, gmode, i

gdriver=DETECT

initgraph(&gdriver, &gmode, "c:\\caic\\bgi")

setbkcolor(BLUE)

cleardevice()

setcolor(GREEN)

circle(320, 240, 98)

setlinestyle(0, 0, 3)/*设置三点宽实线*/

setcolor(2)

rectangle(220, 140, 420, 340)

setcolor(WHITE)

setlinestyle(4, 0xaaaa, 1)

/*设置一点宽用户定义线*/

line(220, 240, 420, 240)

line(320, 140, 320, 340)

getch()

closegraph()

return 0

}