📄 grtry.c
字号:
if (d < 0)
{
d += 2*x+3; /* 根据误差项d的判断,决定非最大位移方向上是走还是不走 */
}
else
{
d += 2*(x-y)+5;
y--;
}
x++;
}
}
/* 画实心圆函数 */
void Circlefill(INT16 x1, INT16 y1, UINT16 r, UINT8 color)
{
INT16 i, x, y, d;
x = 0;
y = r;
d = 1-r; /* 计算初始值 */
while (x <= y)
{
/* 绘制点(x,y)及其在八分圆中的另外7个对称点 */
Line(x1+x, y1+y, x1-x, y1+y, color);
Line(x1+x, y1-y, x1-x, y1-y, color);
Line(x1+y, y1+x, x1-y, y1+x, color);
Line(x1+y, y1-x, x1-y, y1-x, color);
if (d < 0)
{
d += 2*x+3; /* 根据误差项d的判断,决定非最大位移方向上是走还是不走 */
}
else
{
d += 2*(x-y)+5;
y--;
}
x++;
}
}
/* 设置调色板 */
/* 0 失败 */
/* 1 成功 */
UINT8 SetSVGAPalette(INT8 *FillName)
{
INT16 fp;
INT16 i, j;
UINT8 Buffer[768];
RGBQUAD bmiColors[256];
struct REGPACK reg;
if ((fp = open(FillName, O_RDONLY|O_BINARY)) == -1)
{
printf("can't open the file!");
getch();
return 0;
}
/*----------以下为设置调色板信息----------*/
lseek(fp, 54L, SEEK_SET);
if (read(fp, (char *)bmiColors, 1024) != 1024) /* 读当前图片调色板数据 */
{
printf("Can't get palette !\n");
close(fp);
getch();
return 0;
}
close(fp);
SetSVGAPaletteKey = 1; /* 标记为设置过调色板 */
for (i = 0, j = 0; i < 256; ++i, j +=3) /* 拼凑信息 */
{
Buffer[j] = bmiColors[i].b >> 2;
Buffer[j + 1] = bmiColors[i].g >> 2;
Buffer[j + 2] = bmiColors[i].r >> 2;
}
reg.r_ax = 0x1012;
reg.r_bx = 0;
reg.r_cx = 256;
reg.r_es = FP_SEG(Buffer);
reg.r_dx = FP_OFF(Buffer);
intr(0x10, ®); /* 使用中断完成设置 */
return 1;
}
/* 显示位图函数 */
void ShowBmp(INT8 *FillName)
{
INT16 fp;
INT16 i, j;
UINT32 Width, Height, Linebytes;
UINT8 Buffer[1024];
if ((fp = open(FillName, O_RDONLY|O_BINARY)) == -1)
{
printf("can't open the file!");
getch();
return;
}
lseek(fp, 18L, SEEK_SET); /* 读取文件宽高 */
read(fp, &Width, 4);
read(fp, &Height, 4);
/* 若尺寸不对 */
if ((Width != COLS) || (Height != ROWS))
{
printf("the bmp size wrong!");
close(fp);
getch();
return;
}
if (Width%4) /* 拼凑4字节倍数 */
{
Linebytes = Width+(4-Width%4);
}
else
{
Linebytes = Width;
}
/*----------以下为设置调色板信息----------*/
if (!SetSVGAPaletteKey)
{
if (!SetSVGAPalette(FillName))
{
printf("can't Set the Palette!");
close(fp);
getch();
return;
}
}
lseek(fp, 1078L, SEEK_SET); /* 开始读取图形数据 */
switch (COLS+ROWS)
{
case 320+200: SelectPage(0); break;
case 640+480: SelectPage(4); break;
case 800+600: SelectPage(7);break;
/*case 1024+768: SelectPage(11); break;*/
}
for (i = Height-1; i >= 0; i--)
{
read(fp, Buffer, Linebytes);/* 一次读取一行 */
if ((COLS+ROWS) == (320+200))
{
movedata(FP_SEG(Buffer), FP_OFF(Buffer), FP_SEG(VideoBuffer+(320*i)), FP_OFF(VideoBuffer+(320*i)), 320);
}
if ((COLS+ROWS) == (640+480))
{
switch (i)
{
case 102:
movedata(FP_SEG(Buffer+256), FP_OFF(Buffer+256), FP_SEG(VideoBuffer+(640*i)+256), FP_OFF(VideoBuffer+(640*i)+256), 384);
SelectPage(0);
movedata(FP_SEG(Buffer), FP_OFF(Buffer), FP_SEG(VideoBuffer+(640*i)), FP_OFF(VideoBuffer+(640*i)), 256);
break;
case 204:
movedata(FP_SEG(Buffer+512), FP_OFF(Buffer+512), FP_SEG(VideoBuffer+(640*i)+512), FP_OFF(VideoBuffer+(640*i)+512), 128);
SelectPage(1);
movedata(FP_SEG(Buffer), FP_OFF(Buffer), FP_SEG(VideoBuffer+(640*i)), FP_OFF(VideoBuffer+(640*i)), 512);
break;
case 307:
movedata(FP_SEG(Buffer+128), FP_OFF(Buffer+128), FP_SEG(VideoBuffer+(640*i)+128), FP_OFF(VideoBuffer+(640*i)+128), 512);
SelectPage(2);
movedata(FP_SEG(Buffer), FP_OFF(Buffer), FP_SEG(VideoBuffer+(640*i)), FP_OFF(VideoBuffer+(640*i)), 128);
break;
case 409:
movedata(FP_SEG(Buffer+384), FP_OFF(Buffer+384), FP_SEG(VideoBuffer+(640*i)+384), FP_OFF(VideoBuffer+(640*i)+384), 256);
SelectPage(3);
movedata(FP_SEG(Buffer), FP_OFF(Buffer), FP_SEG(VideoBuffer+(640*i)), FP_OFF(VideoBuffer+(640*i)), 384);
break;
default:
movedata(FP_SEG(Buffer), FP_OFF(Buffer), FP_SEG(VideoBuffer+(640*i)), FP_OFF(VideoBuffer+(640*i)), Linebytes);
}
}
if ((COLS+ROWS) == (800+600))
{
switch (i)
{
case 81:
movedata(FP_SEG(Buffer+736), FP_OFF(Buffer+736), FP_SEG(VideoBuffer+(800*i)+736), FP_OFF(VideoBuffer+(800*i)+736), 64);
SelectPage(0);
movedata(FP_SEG(Buffer), FP_OFF(Buffer), FP_SEG(VideoBuffer+(800*i)), FP_OFF(VideoBuffer+(800*i)), 736);
break;
case 163:
movedata(FP_SEG(Buffer+672), FP_OFF(Buffer+672), FP_SEG(VideoBuffer+(800*i)+672), FP_OFF(VideoBuffer+(800*i)+672), 128);
SelectPage(1);
movedata(FP_SEG(Buffer), FP_OFF(Buffer), FP_SEG(VideoBuffer+(800*i)), FP_OFF(VideoBuffer+(800*i)), 672);
break;
case 245:
movedata(FP_SEG(Buffer+608), FP_OFF(Buffer+608), FP_SEG(VideoBuffer+(800*i)+608), FP_OFF(VideoBuffer+(800*i)+608), 192);
SelectPage(2);
movedata(FP_SEG(Buffer), FP_OFF(Buffer), FP_SEG(VideoBuffer+(800*i)), FP_OFF(VideoBuffer+(800*i)), 608);
break;
case 327:
movedata(FP_SEG(Buffer+544), FP_OFF(Buffer+544), FP_SEG(VideoBuffer+(800*i)+544), FP_OFF(VideoBuffer+(800*i)+544), 256);
SelectPage(3);
movedata(FP_SEG(Buffer), FP_OFF(Buffer), FP_SEG(VideoBuffer+(800*i)), FP_OFF(VideoBuffer+(800*i)), 544);
break;
case 409:
movedata(FP_SEG(Buffer+480), FP_OFF(Buffer+480), FP_SEG(VideoBuffer+(800*i)+480), FP_OFF(VideoBuffer+(800*i)+480), 320);
SelectPage(4);
movedata(FP_SEG(Buffer), FP_OFF(Buffer), FP_SEG(VideoBuffer+(800*i)), FP_OFF(VideoBuffer+(800*i)), 480);
break;
case 491:
movedata(FP_SEG(Buffer+416), FP_OFF(Buffer+416), FP_SEG(VideoBuffer+(800*i)+416), FP_OFF(VideoBuffer+(800*i)+416), 384);
SelectPage(5);
movedata(FP_SEG(Buffer), FP_OFF(Buffer), FP_SEG(VideoBuffer+(800*i)), FP_OFF(VideoBuffer+(800*i)), 416);
break;
case 573:
movedata(FP_SEG(Buffer+352), FP_OFF(Buffer+352), FP_SEG(VideoBuffer+(800*i)+352), FP_OFF(VideoBuffer+(800*i)+352), 448);
SelectPage(6);
movedata(FP_SEG(Buffer), FP_OFF(Buffer), FP_SEG(VideoBuffer+(800*i)), FP_OFF(VideoBuffer+(800*i)), 352);
break;
default:
movedata(FP_SEG(Buffer), FP_OFF(Buffer), FP_SEG(VideoBuffer+(800*i)), FP_OFF(VideoBuffer+(800*i)), Linebytes);
}
}
if ((COLS+ROWS) == (1024+768))
{
if ((i+1)%64 == 0) SelectPage(i/64);
movedata(FP_SEG(Buffer), FP_OFF(Buffer), FP_SEG(VideoBuffer+(1024*i)), FP_OFF(VideoBuffer+(1024*i)), Linebytes);
}
}
/*
81.92 736
163.84 672
245.76 608
327.68 544
409.6 480
491.52 416
573.44 352
*/
close(fp);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -