📄 draw.c~
字号:
#include "myhead.h"int fd;
char * fbp;int start(void)
{
struct fr400vdc_config cfg;
int x[13]={0,320,1,1,1,0,240,1,1,1,0,0,6};
cfg.pix_x=320;
cfg.pix_y=240;
cfg.pix_sz=3;
cfg.skipbf=0;
cfg.buf_unit_sz=320*240*3;
cfg.buf_num=1;
cfg.stop_immidiate=1;
cfg.rd_count_buf_idx=1;
memcpy(cfg.prm,x,13*4);
//cfg.prm[13]={0,320,1,1,1,0,240,1,1,1,0,0,6};
cfg.rddl=1;
cfg.hls=0;
cfg.pal=0;
cfg.cscv=0;
cfg.dbls=0;
cfg.r601=0;
cfg.tfop=0;
cfg.dsm=0;
cfg.dfp=0;
cfg.die=1;
cfg.enop=0;
cfg.vsop=0;
cfg.hsop=0;
cfg.dsr=0;
cfg.csron=0;
cfg.dpf=1;
cfg.dms=3;
cfg.dma_mode=3;
cfg.dma_ats=2;
cfg.dma_rs=1;
//cfg={320,240,3,0,320*240*3,1,1,1,{0,320,1,1,1,0,240,1,1,1,0,0,6},1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,3,3,2,1};
fd=open("/dev/fr400cc_vdc",O_RDONLY | O_NONBLOCK);
fbp=(char *)mmap(0,320*240*3,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
ioctl(fd,VDCIOCSCFG,&cfg);
ioctl(fd,VDCIOCSDAT,0);
ioctl(fd,VDCIOCSTART,0);
return 0;
}
int close(void)
{
ioctl(fd,VDCIOCSTOP,0);
return 0;
}
int background(char colour)
{
int i;
switch(colour)
{
case 'w':for(i=0;i<320*240*3;i+=3)
{ fbp[i]=0xFF;
fbp[i+1]=0xFF;
fbp[i+2]=0xFF;
}break;
case 'r':for(i=0;i<320*240*3;i+=3)
{ fbp[i]=0xFF;
fbp[i+1]=0x00;
fbp[i+2]=0x00;
}break;
case 'g':for(i=0;i<320*240*3;i+=3)
{ fbp[i]=0x00;
fbp[i+1]=0xFF;
fbp[i+2]=0x00;
}break;
case 'b':for(i=0;i<320*240*3;i+=3)
{ fbp[i]=0x00;
fbp[i+1]=0x00;
fbp[i+2]=0xFF;
}break;
default:for(i=0;i<320*240*3;i+=3)
{ fbp[i]=0x00;
fbp[i+1]=0x00;
fbp[i+2]=0x00;
}break;
}
return 0;
}
int drawdot(int x,int y,char colour)
{
char *pointer;
int colorcode;
switch(colour)
{
case 'w':colorcode=0xFFFFFF;break;
case 'r':colorcode=0xFF0000;break;
case 'g':colorcode=0x00FF00;break;
case 'b':colorcode=0x0000FF;break; default:colorcode=0x000000;break;
}
pointer=(char*)&colorcode;
fbp[(y*320+x)*3] = *pointer; fbp[(y*320+x)*3+1] = *(pointer+1); fbp[(y*320+x)*3+2] = *(pointer+2);// *(char *)(fbp+(y*320+x)*3) = *pointer;
// *(char *)(fbp+(y*320+x)*3+1) = *(pointer+1);
// *(char *)(fbp+(y*320+x)*3+2) = *(pointer+2);
return 0;
}
int drawline(int x1,int y1,int x2,int y2,char colour)
{
int i;
int min, max;
if(x1==x2)
{
if(y1<y2) {min =y1;max =y2;}
else {min=y2;max=y1;}
for(i=min;i<=max;i++)
drawdot(x1,i,colour);
}
else if(y1==y2)
{
if(x1<x2) {min =x1;max =x2;}
else {min=x2;max=x1;}
for(i=min;i<=max;i++)
drawdot(i,y1,colour);
}
else if(((y2-y1)*1.0/(x2-x1)<=1)&&((y2-y1)*1.0/(x2-x1)>=-1))
{
if (x1<x2) { min = x1; max = x2;}
else {min = x2;max = x1;}
for(i=min;i<=max;i++)
drawdot(i, (int)((float)(y2-y1)*(float)(i-x1)/(x2-x1)+y1),colour);
}
else //((y2-y1)/(x2-x1)>1)
{
if(y1<y2) { min =y1;max =y2;}
else {min=y2;max=y1;}
for(i=min;i<=max;i++)
drawdot((int)((float)((i-y1)*(x2-x1))/(y2-y1)+x1),i,colour);
}
return 0;
}
/*int drawcircle(int x,int y,int r ,char colour)
{
int i;
float pi=3.1415926;
int n=r*r;
for(i=0;i<n;i++)
drawdot((int)(x+r*cos(2*i*pi/n)),(int)(y+r*sin(2*pi*i*n)),colour);
return 0;
}*/
int circle(int x,int y,int r,char colour)
{
int i,j;
for(i=0;i<=320;i++)
{ for(j=0;j<=240;j++)
{ if((((i-x)*(i-x)+(j-y)*(j-y)-r*r)>-r)&&(((i-x)*(i-x)+(j-y)*(j-y)-r*r)<r))
drawdot(i,j,colour);
}
} return 0;
}int fullcircle(int x,int y,int r,char colour){
int i,j;
for(i=0;i<=320;i++)
{ for(j=0;j<=240;j++)
{ if(((i-x)*(i-x)+(j-y)*(j-y))<=r*r)
drawdot(i,j,colour);
}
}
}int ellipse(int x,int y,int a,int b,char colour)
{
int i,j;
for(i=0;i<=320;i++)
{ for(j=0;j<=240;j++)
{ if((((i-x)*(i-x)*b*b+(j-y)*(j-y)*a*a-a*a*b*b)>-a*a*b)&&(((i-x)*(i-x)*b*b+(j-y)*(j-y)*a*a-a*a*b*b)<a*a*b))
drawdot(i,j,colour);
}
} return 0;
}int num(char number){ switch(number) { case '0':{ drawline(120,40,200,40,'w'); drawline(120,200,200,200,'w'); drawline(120,40,120,120,'w'); drawline(120,120,120,200,'w'); drawline(200,40,200,120,'w'); drawline(200,120,200,200,'w'); }break; case '1':{ drawline(200,40,200,120,'w'); drawline(200,120,200,200,'w'); }break; case '2':{ drawline(120,40,200,40,'w'); drawline(120,120,200,120,'w'); drawline(120,200,200,200,'w'); drawline(120,120,120,200,'w'); drawline(200,40,200,120,'w'); }break; case '3':{ drawline(120,40,200,40,'w'); drawline(120,120,200,120,'w'); drawline(120,200,200,200,'w'); drawline(200,40,200,120,'w'); drawline(200,120,200,200,'w'); }break; case '4':{ drawline(120,120,200,120,'w'); drawline(120,40,120,120,'w'); drawline(200,40,200,120,'w'); drawline(200,120,200,200,'w'); }break; case '5':{ drawline(120,40,200,40,'w'); drawline(120,120,200,120,'w'); drawline(120,200,200,200,'w'); drawline(120,40,120,120,'w'); drawline(200,120,200,200,'w'); }break; case '6':{ drawline(120,40,200,40,'w'); drawline(120,120,200,120,'w'); drawline(120,200,200,200,'w'); drawline(120,40,120,120,'w'); drawline(120,120,120,200,'w'); drawline(200,120,200,200,'w'); }break; case '7':{ drawline(120,40,200,40,'w'); drawline(200,40,200,120,'w'); drawline(200,120,200,200,'w'); }break; case '8':{ drawline(120,40,200,40,'w'); drawline(120,120,200,120,'w'); drawline(120,200,200,200,'w'); drawline(120,40,120,120,'w'); drawline(120,120,120,200,'w'); drawline(200,40,200,120,'w'); drawline(200,120,200,200,'w'); }break; case '9':{ drawline(120,40,200,40,'w'); drawline(120,120,200,120,'w'); drawline(120,200,200,200,'w'); drawline(120,40,120,120,'w'); drawline(200,40,200,120,'w'); drawline(200,120,200,200,'w'); }break; } return 0;}int gif(void){ int i,j; //for(i=9;i>=0;i--) num('9'); sleep(1); background('r'); num('8'); sleep(1); background('r'); num('7'); sleep(1); background('r'); num('6'); sleep(1); background('r'); num('5'); sleep(1); background('r'); num('4'); sleep(1); background('r'); num('3'); sleep(1); background('r'); num('2'); sleep(1); background('r'); num('1'); sleep(1); background('r'); num('0'); sleep(1); background('r'); for(j=10;j<=120;j+=10) {circle(160,120,j,'w');sleep(1);} for(i=10;i<=120;i+=10) fullcircle(160,120,i,'b'); drawline(100,100,140,100,'w'); drawline(180,100,220,100,'w'); drawline(120,140,120,160,'w'); drawline(120,160,200,160,'w'); drawline(200,140,200,160,'w'); drawdot(160,120,'w');}int rainbrush(void){ int i,j; for(i=0;i<=132;i+=8) drawline(292-i,3*(292-i)/4,292-i+4,3*(292-i+4)/4,'b'); /*drawline(292-i+20,3*(292-i)/4+20,292-i+4+20,3*(292-i+4)/4+20,'w'); drawline(292-i,2*(292-i)/4,292-i+4,2*(292-i+4)/4,'w'); drawline(292-i,3*(292-i)/5,292-i+4,3*(292-i+4)/5,'w'); drawline(292-i,3*(292-i)/8,292-i+4,3*(292-i+4)/8,'w'); }*/ for(j=0;j<=50;j+=10) {ellipse(160,120,2*j,1*j,'b');sleep(1);} brush();}int brush(void){ int i; float n; float pi=3.1415926; for(i=0;i<=720;i++) { n=2*pi/720*i; drawline(160+160*cos(n),240-160*sin(n),160,240,'r'); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -