📄 b0308f58ca26001b1091ad0065de6612
字号:
//#include<math.h>
//#include "system.h"
#define VGA_WIDTH 180
#define SetPixel(base,x,y,k) IOWR(base, y*VGA_WIDTH+x, k) //改动过
unsigned int extern_start_x,extern_start_y,extern_palindex=1;
unsigned long extern_color;
struct palette
{
unsigned int index;
unsigned int r;
unsigned int g;
unsigned int b;
} pal[256];
unsigned long RGB(unsigned int r,unsigned int g,unsigned int b)
{
unsigned long temp;
temp=(r&1023)+(g&1023)*1024+(b&1023)*1048576;
return (unsigned long)temp;
}
unsigned int GetColor(unsigned int r,unsigned int g,unsigned int b)
{
unsigned int i;
for(i=0;i<256;i++)
{
if((pal[i].r==r)&&(pal[i].g==g)&&(pal[i].b==b)) return pal[i].index;
else if((abs(pal[i].r-r)<=10)&&(abs(pal[i].g-g)<=10)&&(abs(pal[i].b-b)<=10)) return pal[i].index;
}
return 300;
}
unsigned int RegisterColor(unsigned int r,unsigned int g,unsigned int b,unsigned int index)
{
pal[index].r=r;
pal[index].g=g;
pal[index].b=b;
pal[index].index=index;
IOWR(VGA_0_BASE,32400+index,RGB(r,g,b));
}
MoveTo(unsigned int x,unsigned int y)
{
extern_start_x=x;
extern_start_y=y;
}
LineTo(unsigned int x,unsigned int y,unsigned int r,unsigned int g,unsigned int b)
{
unsigned int i,k,start_x,end_x,index;
i=abs(x-extern_start_x);
if(x-extern_start_x>0)
{
start_x=extern_start_x;
end_x=x;
}
index=GetColor(r,g,b) ;
if(index==300)
{
RegisterColor(r,g,b,extern_palindex);
index=extern_palindex;
extern_palindex++;
}
for(k=0;k<i;k++)
SetPixel(VGA_0_BASE,start_x+k,y,index);
MoveTo(k+start_x,y);
}
SetPixel1(unsigned int x,unsigned int y,unsigned int r,unsigned int g,unsigned int b)
{
unsigned int index;
index=GetColor(r,g,b);
if(index==300)
{
RegisterColor(r,g,b,extern_palindex);
index=extern_palindex;
extern_palindex++;
if(extern_palindex>=256)
{
printf("\n****************index use up**************");
exit(1);
extern_palindex=1;
}
}
SetPixel(VGA_0_BASE,x,y,index);
}
void startconvert(int hang,int liel,int lieh)
{
unsigned long temp;
temp=lieh;
temp=temp<<16;
temp=temp|liel;
IOWR(LOCK_PIXEL_NUM_BASE,0,hang);
IOWR(PIXEL_LOCK_LIE_BASE,0,temp);
}
unsigned long getdata(int num)
{
IOWR(WHICHOUT_BASE,0,num);
usleep(10);
return IORD(RGB_DATA_BASE,0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -