C语言图形编程代码

合集下载

C语言图形编程(一、字符屏幕)

C语言图形编程(一、字符屏幕)
buf=(char *)malloc(10*10*2);
gettext(1,1,10,10,buf);
puttext(16,16,30,30,buf);
9. movetext() 移动文字函数
功能: 函数movetext()将屏幕上一个矩形区域的文字移到另一个区域上。
用法: 该函数调用方式为 int movetext(int left,int top,int right,int bottom,int newleft,int newtop);
功能:函数clrscr()清除整个当前字符窗口,并且把光标定位于左上角(1,1)处。
用法:此函数调用方式为 void clrscr(void);
说明:括号中void 表示无参数。
该函数相应的头文件为conio.h
返回值:无
例:使用这个函数的例子见4.clreol()函数的实例中。
clrscr();
window(6,8,38,12);
border(6,8,38,12);
gotoxy(2,2);
printf("window 1");
window(8,16,40,24);
border(8,16,40,24);
gotoxy(3,2);
此函数相应的头文件是conio.h
返回值: 如果有一个以上坐标无效,那么函数返回值为0,否则返回1。
for(i=2;i<=endy-starty;i++){
gotoxy(1,i);
putch('1');
gotoxy(endx-startx+1,i);
putch('1');

用C语言输出各种图形

用C语言输出各种图形

输出各种图形一、软件开发目得利用C程序输出各种图形二、数据结构采用数组、函数三、软件功能说明四、软件验收标准1。

有较为美观简洁大方得菜单,能保证用户方便、直观、快捷得熟悉并使用软件得各项功能。

注意:要求每执行一个具体得功能之后,程序将重新显示菜单。

2.有严密正确得数据验证功能与数据处理功能,能够实现各功能模块。

3。

系统要有一定得可靠性、稳定性.五、实现代码1#include<stdio、h>2 #include <stdlib、h>3#include 〈string、h>4#define N 1005char Number[N][N];6 //录入输出图形函数7 void Scanf_print(int k)8{9 int i;10charnum[N];11for(i=0;i<N;i++)12{13 if(k==1)14{15 gets(Number[i]);16 }17else18{19 printf(”%s",Number[i]);20 //printf(”\n");21}22if(strlen(Number[i])==0)23 break;24}2526 }27//文件操作函数28 int Files(char *name,char c)29{30 FILE*fp=NULL;31 int i;32charC[4];33 C[0]=c;34 C[1]='\0’;35 strcat(name,"、txt");36 fp=fopen(name,C);3738 if(fp==NULL)39 {40return—1;41 }4243for(i=0;i<N;i++)44 {4546if(c=='w’)47{48 if(strlen(Number[i])==0)49 break;50 fputs(Number[i],fp);51 fputc('\n',fp);52 }53 else if(c==’r')54 {55 fgets(Number[i],N,fp);56 }57 }58 fclose(fp);59return0;60}61int Filep(char*name,int k)62{63 FILE *fp=NULL;64inti;65charR[N];66 fp=fopen("name、txt”,”a+”);67if(fp==NULL)68{69 return-1;70}71if(k==0)72{73fputs(name,fp);74 fputs("”,fp);75 }76else77{7879 fgets(R,N,fp);80 printf(”%s\n”,R);8182 }83 fclose(fp);84return 0;85}86 void Interface()87 {88 printf("******************** 主菜单******************************\n");89 printf(”程序说明:\n");90 printf(”1,请用户先录入图形,再点击保存 \n");91 printf("2,若录入后没有点击保存,又进行录入,第一次录入得将被覆盖\n”);92 printf("**********************************************************\n");93 printf(”********************1、录入图形*********************\n");94 printf(”********************2、保存图形*********************\n");95printf("********************3、查瞧图形*********************\n");96 printf("******************** 4、退出*********************\n");97 printf("**********************************************************\n”);98 }99 int main()100{101102 int t=1,n,k,i;103char Name[20];104 while(t)105 {106 system(”cls”);107Interface();108 printf("请从1~4中选择、、、\n");109 scanf("%d",&n);110 system("cls”);111switch(n)112{113 case1:114 Scanf_print(1);115 printf("请设计图形(若一行都无元素,回车后设计完成)!\n\n");116 Scanf_print(1);117printf(”\n\n录入成功、、、");118system(”pause");119break;120case 2:121 printf("请为这个图形取一个名字:");122scanf("%s",&Name);123Filep(Name,0);//存入名字124 Files(Name,’w');125printf("\n\n 保存成功!\n\n\n”);126system(”pause");127break;128case3:129 for(i=1;i<N;i++)130 {131 strcpy(Number[i]," ”);132 }133 printf(”***********文件已存图形得名称****************\n\n\n”);134 Filep('no',1);135 printf("\n\n\n*********************************************\n\n\n”);136printf("请输入查瞧图形得名字:”);137scanf("%s”,&Name);138k=Files(Name,'r’);139 if(k==0)140{141printf("\n");142 Scanf_print(0);143 printf("\n");144 }145 else146 printf("\n\n 输入得名字未找到,请输入以上框中有得名字、、、\n\n");147 system("pause");148 break;149case4:t=0;break;150default:151 printf("输入非法字符,请输入1,2,3,4四个整数之一!");152 system(”pause");break;153 }154 }155 system("cls”);156 printf("感谢您得使用,再见!\n\n");157return0;158}六、运行说明1、点击运行后得界面2、输入1并回车后3、设计一个三角形,设计完成后回车即显示设计完成4、回车后回到主界面5、输入2回车之后,为这个图形取名为“三角形",重复以上操作, 我又分别录入了名字为心、心中心、心线等图形6、完成后回车回到主界面,输入3回车之后,会提示已录入得所有图形名称,回复名称之后回车即可查瞧图形7、返回主界面后,若输入4回车8、若在主界面输入除1,2,3,4以外得字符,会出现以下提示。

画图软件C程序代码

画图软件C程序代码

#include <graphics。

h〉#include 〈stdlib.h〉#include <conio。

h>#include <stdio。

h〉#include 〈dos。

h〉#include 〈bios.h〉#include <math.h〉#include <alloc。

h〉/*定义常量*//*向上翻页移键*/#define PAGEUP 0x4900/*向下翻页移键*/#define PAGEDOWN 0x5100/*Escape键*/#define ESC 0x011b/*左移键*/#define LEFT 0x4b00/*右移键*/#define RIGHT 0x4d00/*下移键*/#define DOWN 0x5000/*上移键*/#define UP 0x4800/*空格键*/#define SPACE 0x3920#define NO_PRESSED 0#define LEFT_PRESSED 1#define RIGHT_PRESSED 2#define pi 3.1415926/*定义全局变量*/int Rx,Ry,R;int TOPx,TOPy,BOTTOMx,BOTTOMy;int Centx,Centy;int lineStartx,lineStarty,lineEndx,lineEndy;int linePoint_x[20],linePoint_y[20];/*这里的字模数组均由“点阵字模工具”生成,你可以用你自己需要的点阵信息来替换示例中的字模信息,注意字模大小要一致,否则显示会出问题。

*/char zhi16K[]={/* 以下是’直’的16点阵楷体_GB2312 字模,32 byte */0x01,0x00,0x01,0x00,0x01,0xF0,0x1E,0x00,0x02,0x00,0x07,0xC0,0x08,0x40,0x0F,0x40,0x08,0x40,0x0F,0x40,0x08,0x40,0x0F,0x40,0x08,0x40,0x0F,0xFC,0x70,0x00,0x00,0x00,};char xian16K[]={/*以下是’线’的16点阵楷体_GB2312 字模,32 byte */ 0x00,0x80,0x00,0x90,0x08,0x88,0x10,0x80,0x24,0xF0,0x45,0x80,0x78,0xB0,0x11,0xC0,0x2C,0x88,0x70,0x50,0x04,0x60,0x18,0xA4,0x63,0x14,0x00,0x0C,0x00,0x04,0x00,0x00,};char ju16K[]={/* 以下是’矩’的16点阵楷体_GB2312 字模,32 byte */0x00,0x00,0x08,0x00,0x08,0x78,0x10,0x80,0x1E,0x80,0x28,0xF8,0x48,0x88,0x0E,0x88,0xF8,0xF0,0x08,0x80,0x14,0x80,0x12,0x9E,0x20,0xE0,0x40,0x00,0x00,0x00,0x00,0x00,};char xing16K[]={/*以下是'形’的16点阵楷体_GB2312 字模,32 byte */ 0x00,0x00,0x07,0x88,0x3A,0x08,0x12,0x10,0x12,0x20,0x17,0x48,0xFA,0x10,0x12,0x20,0x12,0xC8,0x12,0x08,0x22,0x10,0x42,0x20,0x00,0x40,0x00,0x80,0x03,0x00,0x00,0x00,};char yuan16K[]={/* 以下是'圆' 的16点阵楷体_GB2312 字模,32 byte */0x00,0xF8,0x3F,0x08,0x23,0x88,0x24,0x88,0x27,0x08,0x21,0xC8,0x2E,0x48,0x29,0x48,0x29,0x48,0x22,0x88,0x24,0x48,0x28,0x08,0x3F,0xE8,0x00,0x10,0x00,0x00,0x00,0x00,};char qing16K[]={/*以下是’清’的16点阵楷体_GB2312 字模,32 byte */ 0x00,0x80,0x00,0xE0,0x33,0x80,0x10,0xE0,0x03,0x80,0x40,0xFC,0x2F,0x00,0x01,0xE0,0x12,0x20,0x13,0xA0,0x22,0x20,0x63,0xA0,0x42,0x20,0x02,0x60,0x00,0x20,0x00,0x00,};char ping16K[]={/* 以下是'屏' 的16点阵楷体_GB2312 字模,32 byte */0x00,0xF0,0x0F,0x30,0x08,0x60,0x0F,0x80,0x0A,0x20,0x09,0x40,0x08,0xF8,0x17,0x20,0x11,0x3E,0x2F,0xE0,0x21,0x20,0x42,0x20,0x82,0x20,0x04,0x20,0x08,0x20,0x00,0x00,};char bao16K[]={/*以下是’保’的16点阵楷体_GB2312 字模,32 byte */ 0x00,0x00,0x09,0xF0,0x0A,0x10,0x12,0x10,0x13,0xE0,0x30,0x80,0x50,0xFC,0x9F,0x80,0x11,0xC0,0x12,0xA0,0x14,0x98,0x18,0x8E,0x10,0x80,0x10,0x80,0x00,0x00,0x00,0x00,};char cun16K[]={/*以下是'存' 的16点阵楷体_GB2312 字模,32 byte */0x01,0x00,0x01,0x00,0x01,0xF0,0x1E,0x00,0x02,0x70,0x05,0x90,0x08,0x20,0x08,0x40,0x18,0x7E,0x2B,0xA0,0xC8,0x20,0x08,0x20,0x08,0x20,0x08,0xA0,0x00,0x40,0x00,0x00,};char jia16K[]={/*以下是’加’的16点阵楷体_GB2312 字模,32 byte */ 0x00,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x0F,0x00,0x79,0x3C,0x09,0x44,0x11,0x44,0x11,0x44,0x22,0x44,0x22,0x78,0x4A,0x00,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};char zai16K[]={/* 以下是'载' 的16点阵楷体_GB2312 字模,32 byte */0x00,0x80,0x08,0xA0,0x08,0x90,0x0E,0x80,0x38,0xF0,0x0F,0x80,0x78,0x50,0x0E,0x50,0x34,0x20,0x1E,0x20,0x34,0x50,0x0E,0x92,0x75,0x0A,0x04,0x06,0x04,0x02,0x00,0x00,};char bang16K[]={/*以下是'帮' 的16点阵楷体_GB2312 字模,32 byte */0x04,0x00,0x07,0x38,0x1C,0x48,0x06,0x50,0x1C,0x50,0x07,0x48,0x78,0x58,0x11,0x40,0x21,0xF0,0x4F,0x10,0x09,0x10,0x09,0x50,0x09,0x20,0x01,0x00,0x01,0x00,0x00,0x00,};char zhu16K[]={/*以下是'助' 的16点阵楷体_GB2312 字模,32 byte */ 0x00,0x00,0x00,0x20,0x0C,0x20,0x34,0x20,0x24,0x20,0x34,0x38,0x25,0xC8,0x34,0x48,0x24,0x48,0x26,0x88,0x38,0x88,0xE1,0x28,0x02,0x10,0x04,0x00,0x00,0x00,0x00,0x00,};/*自定义函数*/void outChinese(char *mat,int matsize,int x,int y,int color); void fill(int startx,int starty,int endx,int endy,int color);void showHelp();void save();void load();int mouseStatus(int*x,int* y);int setMousePos(int x,int y);void DrawMouse(float x,float y);void DrawLine();void DrawRectangle();void LineToCircle(int x0,int y0,int r);void DrawCircle();long factorial(int n);float berFunction(int i,int n,double t);void DrawBezier();/*根据点阵信息显示中文函数*/void outChinese(char *mat,int matsize,int x,int y,int color)/*依次:字模指针、点阵大小、起始坐标(x,y)、颜色*/ {int i, j, k,n;n = (matsize - 1)/ 8 + 1;for(j = 0; j < matsize;j++)for(i = 0; i 〈n;i++)for(k = 0;k 〈8; k++)if(mat[j *n + i]& (0x80 〉〉k))/*测试为1的位则显示*/putpixel(x + i * 8 + k,y + j, color);}/*填充函数*/void fill(int startx,int starty,int endx,int endy,int color){int i,j;for(i=startx;i〈=endx;i++)for(j=starty;j<=endy;j++)/*在指定位置以指定颜色画一像素*/putpixel(i,j,color);}/*显示用户帮助函数*/void showHelp(){setcolor(14);outtextxy(45,50,"Line:");setcolor(WHITE);outtextxy(45,50," 1 Press left button to start until to line end.");outtextxy(45,65," 2 Use UP,DOWN,LEFT,RIGHT keys to move it.”);outtextxy(45,80," 3 Use PAGEUP key to enlarge it,and PAGEDOWN key to shrink it。

C语言图形编程

C语言图形编程

C的图形编程一、屏幕显示模式1、文本模式在文本模式又称字符模式。

在此模式下整个屏幕被划分成(25行,80列),共25*80个文本单元,每个单元包括一个字符和一个属性, 字符即ASCII 码字符, 属性规定该字符的颜色和强度。

坐标原点在屏幕的左上角。

如下图所示:在<conio.h>头文件中定义了文本模式下一些函数常用的有;(1)定义一个文本窗口void window(int left, int top, int right, int bottom);如要定义一个窗口左上角在屏幕(20, 5)处, 大小为30列15行的窗口可写成:window(20, 5, 50, 25);(2)文本窗口颜色的设置void textbackground(int color); //设置背景颜色:void textcolor(int color); //设置字符颜色:有关颜色的定义见表1。

(3)光标定位void gotoxy(int x, int y);(4)清屏void clrscr(void);(5)其它函数一、窗口内文本的输出函数int cprintf("<格式化字符串>", <变量表>);int cputs(char *string);int putch(int ch);cprintf()函数输出一个格式化的字符串或数值到窗口中。

它与printf() 函数的用法完全一样, 区别在于cprintf()函数的输出受窗口限制, 而printf() 函数的输出为整个屏幕。

cputs()函数输出一个字符串到屏幕上, 它与puts()函数用法完全一样,只是受窗口大小的限制。

putch()函数输出一个字符到窗口内。

二、窗口内文本的输入函数int getche(void);getche()函数从键盘上获得一个字符, 在屏幕上显示的时候, 如果字符超过了窗口右边界, 则会被自动转移到下一行的开始位置。

C语言图形编程

C语言图形编程

二、图形文本设置
常规文本模式显示相当于在纸上打字,而图形文本模式显示更接近于排版印刷。这种增强性能的关键是改变字体及字符大小。选择不同的水平位置文本排齐,甚至可以在垂直方向而不是水平方向显示文本。这些都要调用文本设置函数来实现。
88. settextstyle() 设置文本型式函数
如果有错误参数值传给函数settextstyle(),graphresult()函数将给出值-11(表示一般图形错误),当前的文本型式保持不变。
settextstyle()函数相应的头文件为graphics.h
返回值:无
例: 下面的程序中使用了settextstyle()函数,显示不同的文本字体和大小:
CENTER_TExT 1 CENTER_TExT 1
RIGHT_TExT 2 TOP_TExT 2
---------------------------------------------------------------------------
功能: 函数settextstyle() 设置图形文本当前字体、文本显示方向(水平显示或垂直显示)以及字符大小。
用法: 此函数调用方式为void settextstyle(int font,int direction,int charsize);
说明: 函数括号中,font为文本字体参数,direction为文本显示方向,charsize为字符大小参数。头部文件graphics中分别对它们进行了定义。表1-14所列为标准字体。
}
87. sprintf() 格式化输出函数
功能: 函数sprintf()用来作格式化的输出。
用法: 此函数调用方式为int sprintf(char *string,char *format,arg_list);

画图软件C程序代码

画图软件C程序代码

#include <graphics.h>#include <stdlib.h>#include <conio.h>#include <stdio.h>#include <dos.h>#include <bios.h>#include <math.h>#include <alloc.h>/*定义常量*//*向上翻页移键*/#define PAGEUP 0x4900/*向下翻页移键*/#define PAGEDOWN 0x5100/*Escape键*/#define ESC 0x011b/*左移键*/#define LEFT 0x4b00/*右移键*/#define RIGHT 0x4d00/*下移键*/#define DOWN 0x5000/*上移键*/#define UP 0x4800/*空格键*/#define SPACE 0x3920#define NO_PRESSED 0#define LEFT_PRESSED 1#define RIGHT_PRESSED 2#define pi 3.1415926/*定义全局变量*/int Rx,Ry,R;int TOPx,TOPy,BOTTOMx,BOTTOMy;int Centx,Centy;int lineStartx,lineStarty,lineEndx,lineEndy;int linePoint_x[20],linePoint_y[20];/*这里的字模数组均由“点阵字模工具”生成,你可以用你自己需要的点阵信息来替换示例中的字模信息,注意字模大小要一致,否则显示会出问题。

*/char zhi16K[]={/* 以下是 '直' 的 16点阵楷体_GB2312 字模,32 byte */0x01,0x00,0x01,0x00,0x01,0xF0,0x1E,0x00,0x02,0x00,0x07,0xC0,0x08,0x40,0x0F,0x40,0x08,0x40,0x0F,0x40,0x08,0x40,0x0F,0x40,0x08,0x40,0x0F,0xFC,0x70,0x00,0x00,0x00,};char xian16K[]={/* 以下是 '线' 的 16点阵楷体_GB2312 字模,32 byte */ 0x00,0x80,0x00,0x90,0x08,0x88,0x10,0x80,0x24,0xF0,0x45,0x80,0x78,0xB0,0x11,0xC0,0x2C,0x88,0x70,0x50,0x04,0x60,0x18,0xA4,0x63,0x14,0x00,0x0C,0x00,0x04,0x00,0x00,};char ju16K[]={/* 以下是 '矩' 的 16点阵楷体_GB2312 字模,32 byte */ 0x00,0x00,0x08,0x00,0x08,0x78,0x10,0x80,0x1E,0x80,0x28,0xF8,0x48,0x88,0x0E,0x88,0xF8,0xF0,0x08,0x80,0x14,0x80,0x12,0x9E,0x20,0xE0,0x40,0x00,0x00,0x00,0x00,0x00,};char xing16K[]={/* 以下是 '形' 的 16点阵楷体_GB2312 字模,32 byte */ 0x00,0x00,0x07,0x88,0x3A,0x08,0x12,0x10,0x12,0x20,0x17,0x48,0xFA,0x10,0x12,0x20,0x12,0xC8,0x12,0x08,0x22,0x10,0x42,0x20,0x00,0x40,0x00,0x80,0x03,0x00,0x00,0x00,};char yuan16K[]={/* 以下是 '圆' 的 16点阵楷体_GB2312 字模,32 byte */ 0x00,0xF8,0x3F,0x08,0x23,0x88,0x24,0x88,0x27,0x08,0x21,0xC8,0x2E,0x48,0x29,0x48,0x29,0x48,0x22,0x88,0x24,0x48,0x28,0x08,0x3F,0xE8,0x00,0x10,0x00,0x00,0x00,0x00,};char qing16K[]={/* 以下是 '清' 的 16点阵楷体_GB2312 字模,32 byte */ 0x00,0x80,0x00,0xE0,0x33,0x80,0x10,0xE0,0x03,0x80,0x40,0xFC,0x2F,0x00,0x01,0xE0,0x12,0x20,0x13,0xA0,0x22,0x20,0x63,0xA0,0x42,0x20,0x02,0x60,0x00,0x20,0x00,0x00,};char ping16K[]={/* 以下是 '屏' 的 16点阵楷体_GB2312 字模,32 byte */ 0x00,0xF0,0x0F,0x30,0x08,0x60,0x0F,0x80,0x0A,0x20,0x09,0x40,0x08,0xF8,0x17,0x20,0x11,0x3E,0x2F,0xE0,0x21,0x20,0x42,0x20,0x82,0x20,0x04,0x20,0x08,0x20,0x00,0x00,};char bao16K[]={/* 以下是 '保' 的 16点阵楷体_GB2312 字模,32 byte */ 0x00,0x00,0x09,0xF0,0x0A,0x10,0x12,0x10,0x13,0xE0,0x30,0x80,0x50,0xFC,0x9F,0x80,0x11,0xC0,0x12,0xA0,0x14,0x98,0x18,0x8E,0x10,0x80,0x10,0x80,0x00,0x00,0x00,0x00,};char cun16K[]={/* 以下是 '存' 的 16点阵楷体_GB2312 字模,32 byte */0x01,0x00,0x01,0x00,0x01,0xF0,0x1E,0x00,0x02,0x70,0x05,0x90,0x08,0x20,0x08,0x40,0x18,0x7E,0x2B,0xA0,0xC8,0x20,0x08,0x20,0x08,0x20,0x08,0xA0,0x00,0x40,0x00,0x00,};char jia16K[]={/* 以下是 '加' 的 16点阵楷体_GB2312 字模,32 byte */0x00,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x0F,0x00,0x79,0x3C,0x09,0x44,0x11,0x44,0x11,0x44,0x22,0x44,0x22,0x78,0x4A,0x00,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};char zai16K[]={/* 以下是 '载' 的 16点阵楷体_GB2312 字模,32 byte */0x00,0x80,0x08,0xA0,0x08,0x90,0x0E,0x80,0x38,0xF0,0x0F,0x80,0x78,0x50,0x0E,0x50,0x34,0x20,0x1E,0x20,0x34,0x50,0x0E,0x92,0x75,0x0A,0x04,0x06,0x04,0x02,0x00,0x00,};char bang16K[]={/* 以下是 '帮' 的 16点阵楷体_GB2312 字模,32 byte */0x04,0x00,0x07,0x38,0x1C,0x48,0x06,0x50,0x1C,0x50,0x07,0x48,0x78,0x58,0x11,0x40,0x21,0xF0,0x4F,0x10,0x09,0x10,0x09,0x50,0x09,0x20,0x01,0x00,0x01,0x00,0x00,0x00,};char zhu16K[]={/* 以下是 '助' 的 16点阵楷体_GB2312 字模,32 byte */0x00,0x00,0x00,0x20,0x0C,0x20,0x34,0x20,0x24,0x20,0x34,0x38,0x25,0xC8,0x34,0x48,0x24,0x48,0x26,0x88,0x38,0x88,0xE1,0x28,0x02,0x10,0x04,0x00,0x00,0x00,0x00,0x00,};/*自定义函数*/void outChinese(char *mat,int matsize,int x,int y,int color); void fill(int startx,int starty,int endx,int endy,int color); void showHelp();void save();void load();int mouseStatus(int* x,int* y);int setMousePos(int x, int y);void DrawMouse(float x,float y);void DrawLine();void DrawRectangle();void LineToCircle(int x0,int y0,int r);void DrawCircle();long factorial(int n);float berFunction(int i,int n,double t);void DrawBezier();/*根据点阵信息显示中文函数*/void outChinese(char *mat,int matsize,int x,int y,int color)/*依次:字模指针、点阵大小、起始坐标(x,y)、颜色*/{int i, j, k, n;n = (matsize - 1) / 8 + 1;for(j = 0; j < matsize; j++)for(i = 0; i < n; i++)for(k = 0;k < 8; k++)if(mat[j * n + i] & (0x80 >> k))/*测试为1的位则显示*/putpixel(x + i * 8 + k, y + j, color);}/*填充函数*/void fill(int startx,int starty,int endx,int endy,int color){int i,j;for(i=startx;i<=endx;i++)for(j=starty;j<=endy;j++)/*在指定位置以指定颜色画一像素*/putpixel(i,j,color);}/*显示用户帮助函数*/void showHelp(){setcolor(14);outtextxy(45,50,"Line:");setcolor(WHITE);outtextxy(45,50," 1 Press left button to start until to line end."); outtextxy(45,65," 2 Use UP,DOWN,LEFT,RIGHT keys to move it.");outtextxy(45,80," 3 Use PAGEUP key to enlarge it, and PAGEDOWN key to shrink it.");outtextxy(45,95," 4 Use SPACE key to rotate it.");setcolor(14);outtextxy(45,120,"Rectangle:");setcolor(WHITE);outtextxy(45,120," 1 Press left button to start until to right corner.");outtextxy(45,135," 2 Use UP,DOWN,LEFT,RIGHT keys to move it."); outtextxy(45,150," 3 Use PAGEUP key to enlarge it, and PAGEDOWN key to shrink it.");setcolor(14);outtextxy(45,170,"Circle:");setcolor(WHITE);outtextxy(45,170," 1 Press left button to start until to end.");outtextxy(45,185," 2 Use PAGEUP key to enlarge it, and PAGEDOWN key to shrink it.");setcolor(14);outtextxy(45,205,"Bezier:");setcolor(WHITE);outtextxy(45,205," Press left button to start, and right button to end.");outtextxy(45,230,"Press ESC key to stop the operation function.");outtextxy(45,245,"Press right button to end the drawing works.");outtextxy(45,260,"Press any key to continue......");getch();fill(40,40,625,270,0);}/*保存函数*/void save(){int i,j;FILE *fp;char fileName[20];fill(0,447,630,477,2);gotoxy(1,25);printf("\n\n\n\n Input the file name[.dat]:");scanf("%s",fileName);fill(0,447,630,477,2);/*以读写的方式打开文件*/if((fp=fopen(fileName,"w+"))==NULL){outtextxy(260,455,"Failed to open file!");exit(0);}outtextxy(280,455,"saving...");/*保存像素到文件*/for(i=5;i<630;i++)for(j=30;j<=445;j++)fputc(getpixel(i,j),fp);fclose(fp);fill(0,447,630,477,2);outtextxy(260,455,"save over!");}/*打开函数*/void load(){int i,j;char fileName[20];FILE *fp;fill(0,447,630,477,2);gotoxy(1,25);printf("\n\n\n\n Input the file name[.dat]:"); scanf("%s",fileName);/*打开指定的文件*/if((fp=fopen(fileName,"r+"))!=NULL){fill(0,447,630,477,2);outtextxy(280,455,"loading...");/*从文件中读出像素*/for(i=5;i<630;i++)for(j=30;j<=445;j++)putpixel(i,j,fgetc(fp));fill(0,447,630,477,2);outtextxy(280,455,"loading over !");}/*打开失败*/else{fill(0,447,630,477,2);outtextxy(260,455,"Failed to open file!");}fclose(fp);}/*获取鼠标状态函数*/int mouseStatus(int* x,int* y){/*定义两个寄存器变量,分别存储入口参数和出口参数*/ union REGS inregs,outregs;int status;status=NO_PRESSED;/*入口参数AH=3,读取鼠标位置及其按钮状态*/inregs.x.ax=3;int86(0x33,&inregs,&outregs);/*CX表示水平位置,DX表示垂直位置*/*x=outregs.x.cx;*y=outregs.x.dx;/*BX表示按键状态*/if(outregs.x.bx&1)status=LEFT_PRESSED;else if(outregs.x.bx&2)status=RIGHT_PRESSED;return (status);}/*设置鼠标指针位置函数*/int setMousePos(int x,int y){union REGS inregs,outregs;/*入口参数AH=4,设置鼠标指针位置*/inregs.x.ax=4;inregs.x.cx=x;inregs.x.dx=y;int86(0x33,&inregs,&outregs);}/*绘制鼠标函数*/void DrawMouse(float x,float y){line(x,y,x+5,y+15);line(x,y,x+15,y+5);line(x+5,y+15,x+15,y+5);line(x+11,y+9,x+21,y+19);line(x+9,y+11,x+19,y+21);line(x+22,y+19,x+20,y+21);}/*绘制直线函数*/void DrawLine(){int x0,y0,x1,y1;int last_x=0,last_y=0;int endFlag=0;int key;int temStartx,temStarty,temEndx,temEndy;int increment_x,increment_y,angle;DrawMouse(last_x,last_y);while(1){/*右键结束画直线*/while((mouseStatus(&x1,&y1)==RIGHT_PRESSED))endFlag=1;if(endFlag==1)break;/*鼠标移动,没有单击,仅仅画移动的鼠标*/while(mouseStatus(&x1,&y1) == NO_PRESSED){if(last_x!=x1||last_y!=y1){DrawMouse(last_x,last_y);DrawMouse(x1,y1);last_x=x1;last_y=y1;}}/*单击左键后,开始画直线*/if(mouseStatus(&x0,&y0)==LEFT_PRESSED){DrawMouse(last_x,last_y);line(x0,y0,x1,y1);last_x=x1;last_y=y1;/*拉动过程中,画直线和鼠标*/while(mouseStatus(&x1, &y1)==LEFT_PRESSED){if(last_x!=x1||last_y!=y1){line(x0,y0,last_x,last_y);line(x0,y0,x1,y1);last_x=x1;last_y=y1;}}/*松开左键后,画直线完成,记录直线的起始位置*/lineStartx=x0;lineStarty=y0;lineEndx=x1;lineEndy=y1;while(1){/*从键盘获取键值,开始操作(移动、放大、缩小、旋转)直线*/ key=bioskey(0);/*ESC键,退出操作*/if(key==ESC)break;/*旋转*/if(key==SPACE){/*计算旋转中心*//*如果直线示倾斜的*/if((lineStarty!=lineEndy)&& (lineStartx!=lineEndx)){Centx=(lineEndx-lineStartx)/2+lineStartx;Centy=(lineEndy-lineStarty)/2+lineStarty;}/*如果直线是竖直的*/if(lineStarty==lineEndy){Centx=(lineEndx-lineStartx)/2+lineStartx;Centy=lineStarty;}/*如果直线是水平的*/if(lineStartx==lineEndx){Centx=lineStartx;Centy=(lineEndy-lineStarty)/2+lineStarty;}temStartx=lineStartx;temStarty=lineStarty;temEndx=lineEndx;temEndy=lineEndy;/*旋转不能超过边界*/if(lineStartx>=10 && lineStarty>=40 && lineEndx <=620 && lineEndy <=445){/*清除原有的直线*/setwritemode(XOR_PUT);line(lineStartx,lineStarty,lineEndx,lineEndy);/*计算旋转30度后的起点坐标*/lineStartx=(temStartx-Centx)*cos(pi/6)-(temStarty-Centy)*sin(pi/6)+Centx; lineEndx=(temEndx-Centx)*cos(pi/6)-(temEndy-Centy)*sin(pi/6)+Centx;/*计算旋转30度后的终点坐标*/lineStarty=(temStartx-Centx)*sin(pi/6)+(temStarty-Centy)*cos(pi/6)+Centy;lineEndy=(temEndx-Centx)*sin(pi/6)+(temEndy-Centy)*cos(pi/6)+Centy;temStartx=lineStartx;temStarty=lineStarty;temEndx=lineEndx;temEndy=lineEndy;/*绘制旋转后的直线*/line(lineStartx,lineStarty,lineEndx,lineEndy);}}/*左移直线*/if(key==LEFT){if(lineStartx>=10 && lineStarty>=40 && lineEndx <=620 && lineEndy <=445){setwritemode(XOR_PUT);line(lineStartx,lineStarty,lineEndx,lineEndy);/*起始的横坐标减小*/lineStartx-=5;lineEndx-=5;line(lineStartx,lineStarty,lineEndx,lineEndy);}}/*右移直线*/if(key==RIGHT){if(lineStartx>=10 && lineStarty>=40 && lineEndx <=620 && lineEndy <=445){setwritemode(XOR_PUT);line(lineStartx,lineStarty,lineEndx,lineEndy);/*起始的横坐标增加*/lineStartx+=5;lineEndx+=5;line(lineStartx,lineStarty,lineEndx,lineEndy);}}/*下移直线*/if(key==DOWN){if(lineStartx>=10 && lineStarty>=40 && lineEndx <=620 && lineEndy <=445){setwritemode(XOR_PUT);line(lineStartx,lineStarty,lineEndx,lineEndy);/*起始的纵坐标增加*/lineStarty+=5;lineEndy+=5;line(lineStartx,lineStarty,lineEndx,lineEndy);}}/*上移直线*/if(key==UP){if(lineStartx>=10 && lineStarty>=40 && lineEndx <=620 && lineEndy <=445){setwritemode(XOR_PUT);line(lineStartx,lineStarty,lineEndx,lineEndy);/*起始的纵坐标减小*/lineStarty-=5;lineEndy-=5;line(lineStartx,lineStarty,lineEndx,lineEndy);}}/*放大直线*/if(key==PAGEUP){if(lineStartx>=10 && lineStarty>=40 && lineEndx <=620 && lineEndy <=445){setwritemode(XOR_PUT);line(lineStartx,lineStarty,lineEndx,lineEndy);/*如果直线是倾斜的*/if((lineStarty!=lineEndy)&& (lineStartx!=lineEndx)){/*计算直线的倾角*/angle=atan((fabs(lineEndy-lineStarty))/(fabs(lineEndx-lineStartx)));/*计算水平增量*/increment_x=cos(angle)*2;/*计算垂直增量*/increment_y=sin(angle)*2;/*计算放大后的起始坐标*/if(lineStartx<lineEndx){lineStartx-=increment_x;lineStarty-=increment_y;lineEndx+=increment_x;lineEndy+=increment_y;}if(lineStartx>lineEndx){lineEndx-=increment_x;lineEndy-=increment_y;lineStartx+=increment_x;lineStarty+=increment_y;}}/*如果直线竖直的*/if(lineStarty==lineEndy){lineStartx-=5;lineEndx+=5;}/*如果直线是水平的*/if(lineStartx==lineEndx){lineStarty-=5;lineEndy+=5;}line(lineStartx,lineStarty,lineEndx,lineEndy);}}/*缩小直线*/if(key==PAGEDOWN){if(lineStartx>=10 && lineStarty>=40 && lineEndx <=620 && lineEndy <=445){setwritemode(XOR_PUT);line(lineStartx,lineStarty,lineEndx,lineEndy);/*如果直线是倾斜的*/if((lineStarty!=lineEndy)&& (lineStartx!=lineEndx)){/*计算直线的倾角*/angle=atan((fabs(lineEndy-lineStarty))/(fabs(lineEndx-lineStartx)));/*计算水平减少量*/increment_x=cos(angle)*2;/*计算垂直减少量*/increment_y=sin(angle)*2;/*计算缩小后的起始坐标*/if(lineStartx<lineEndx){lineStartx+=increment_x;lineStarty+=increment_y;lineEndx-=increment_x;lineEndy-=increment_y;}if(lineStartx>lineEndx){lineEndx+=increment_x;lineEndy+=increment_y;lineStartx-=increment_x;lineStarty-=increment_y;}}/*如果直线竖直的*/if(lineStarty==lineEndy){lineStartx+=5;lineEndx-=5;}/*如果直线是水平的*/if(lineStartx==lineEndx){lineStarty+=5;lineEndy-=5;}line(lineStartx,lineStarty,lineEndx,lineEndy); }}}DrawMouse(x1,y1);}}DrawMouse(last_x,last_y);}/*绘制矩形函数*/void DrawRectangle(){int x0,y0,x1,y1;int last_x=0,last_y=0;int endFlag=0;int key;DrawMouse(last_x,last_y);while(1){/*单击右键,结束绘制矩形*/while((mouseStatus(&x1,&y1)==RIGHT_PRESSED))endFlag=1;if(endFlag==1)break;/*移动鼠标,仅仅绘制鼠标即可*/while(mouseStatus(&x1,&y1) == NO_PRESSED){if(last_x!=x1||last_y!=y1){DrawMouse(last_x,last_y);DrawMouse(x1,y1);last_x=x1;last_y=y1;}}/*单击左键开始绘制矩形*/if(mouseStatus(&x0,&y0)==LEFT_PRESSED){DrawMouse(last_x,last_y);rectangle(x0,y0,x1,y1);last_x=x1;last_y=y1;/*按着鼠标左键不动,绘制矩形*/while(mouseStatus(&x1,&y1)==LEFT_PRESSED){if(last_x!=x1||last_y!=y1){rectangle(x0,y0,last_x,last_y);rectangle(x0,y0,x1,y1);last_x=x1;last_y=y1;}}/*绘制结束后,记录左上角和右下角的坐标*/TOPx=x0;TOPy=y0;BOTTOMx=x1;BOTTOMy=y1;while(1){key=bioskey(0);if(key==ESC)break;/*放大矩形*/if(key==PAGEUP){if(TOPx>=10 && TOPy>=40 && BOTTOMx <=620 &&BOTTOMy <=445) {/*清除原有的直线*/setwritemode(XOR_PUT);rectangle(TOPx,TOPy,BOTTOMx,BOTTOMy);/*左上角坐标减小*/TOPx-=5;TOPy-=5;/*右下角坐标增加*/BOTTOMx+=5;BOTTOMy+=5;/*绘制放大后的矩形*/rectangle(TOPx,TOPy,BOTTOMx,BOTTOMy);}}/*缩小矩形*/if(key==PAGEDOWN){if(TOPx>=10 && TOPy>=40 && BOTTOMx <=620 &&BOTTOMy <=445) {setwritemode(XOR_PUT);rectangle(TOPx,TOPy,BOTTOMx,BOTTOMy);/*左上角坐标增加*/TOPx+=5;TOPy+=5;/*右下角坐标减小*/BOTTOMx-=5;BOTTOMy-=5;/*绘制缩小后的矩形*/rectangle(TOPx,TOPy,BOTTOMx,BOTTOMy);}}/*左移矩形*/if(key==LEFT){if(TOPx>=10 && TOPy>=40 && BOTTOMx <=620 &&BOTTOMy <=445) {setwritemode(XOR_PUT);rectangle(TOPx,TOPy,BOTTOMx,BOTTOMy);/*横坐标减小*/TOPx-=5;BOTTOMx-=5;rectangle(TOPx,TOPy,BOTTOMx,BOTTOMy);}}/*右移矩形*/if(key==RIGHT){if(TOPx>=10 && TOPy>=40 && BOTTOMx <=620 &&BOTTOMy <=445) {setwritemode(XOR_PUT);rectangle(TOPx,TOPy,BOTTOMx,BOTTOMy);/*横坐标增加*/TOPx+=5;BOTTOMx+=5;rectangle(TOPx,TOPy,BOTTOMx,BOTTOMy);}}/*下移矩形*/if(key==DOWN){if(TOPx>=10 && TOPy>=40 && BOTTOMx <=620 &&BOTTOMy <=445) {setwritemode(XOR_PUT);rectangle(TOPx,TOPy,BOTTOMx,BOTTOMy);/*纵坐标增加*/TOPy+=5;BOTTOMy+=5;rectangle(TOPx,TOPy,BOTTOMx,BOTTOMy);}}/*上移矩形*/if(key==UP){if(TOPx>=10 && TOPy>=40 && BOTTOMx <=620 &&BOTTOMy <=445) {setwritemode(XOR_PUT);rectangle(TOPx,TOPy,BOTTOMx,BOTTOMy);/*纵坐标减小*/TOPy-=5;BOTTOMy-=5;rectangle(TOPx,TOPy,BOTTOMx,BOTTOMy);}}}DrawMouse(x1,y1);}}DrawMouse(last_x,last_y);}/*用直线法生成圆*/void LineToCircle(int x0,int y0,int r){int angle;int x1,y1,x2,y2;angle=0;x1=r*cos(angle*pi/180);y1=r*sin(angle*pi/180);while(angle<45){angle+=5;x2=r*cos(angle*pi/180);y2=r*sin(angle*pi/180);while(x2==x1)x2++;while(y2==y1)y2++;line(x0+x1,y0+y1,x0+x2,y0+y2);line(x0-x1,y0+y1,x0-x2,y0+y2);line(x0+x1,y0-y1,x0+x2,y0-y2);line(x0-x1,y0-y1,x0-x2,y0-y2);line(x0+y1,y0-x1,x0+y2,y0-x2);line(x0+y1,y0+x1,x0+y2,y0+x2);line(x0-y1,y0-x1,x0-y2,y0-x2);line(x0-y1,y0+x1,x0-y2,y0+x2);x1=x2+1;y1=y2+1;}}/*绘制圆函数*/void DrawCircle(){int x0,y0,x1,y1,r,oldr;int last_x,last_y;int endFlag;int key;last_x=0;last_y=0;endFlag=0;DrawMouse(last_x,last_y);while(1){/*单击右键,绘制圆结束*/while((mouseStatus(&x1,& y1)==RIGHT_PRESSED)) {endFlag=1;}if(endFlag==1)break;/*移动鼠标,仅绘制鼠标即可*/while(mouseStatus(&x1,&y1) == NO_PRESSED){if(last_x!=x1||last_y!=y1){DrawMouse(last_x,last_y);DrawMouse(x1,y1);last_x=x1;}}/*单击左键,开始绘制圆*/if(mouseStatus(&x0,&y0)==LEFT_PRESSED){/*计算半径*/r=sqrt((x0-x1)*(x0-x1)+(y0-y1)*(y0-y1));DrawMouse(last_x,last_y);LineToCircle(x0,y0,r);last_x=x1;last_y=y1;oldr=r;/*按住鼠标左键不动,拖动鼠标绘制圆*/while(mouseStatus(&x1,&y1)==LEFT_PRESSED){if(last_x!=x1||last_y!=y1){r=sqrt((x0-x1)*(x0-x1)+(y0-y1)*(y0-y1));LineToCircle(x0,y0,oldr);LineToCircle(x0,y0,r);last_x=x1;last_y=y1;oldr=r;}}/*绘制结束后,记录圆的圆心和半径*/Rx=x0;Ry=y0;R=r;while(1){key=bioskey(0);if(key==ESC)break;/*放大圆*/if(key==PAGEUP){if(Rx-R>10 && Ry-R>40 && Rx+R<620 && Ry+R<445) {/*如果半径和初始状态一样大,则保留原来的圆*/ if(R==r){setcolor(WHITE);R+=10;circle(Rx,Ry,R);}elsesetcolor(BLACK);/*用背景色画圆,覆盖原有的*/circle(Rx,Ry,R);/*增加半径*/R+=10;setcolor(WHITE);/*绘制新圆*/circle(Rx,Ry,R);}}}/*缩小圆*/if(key==PAGEDOWN){if(Rx-R>10 && Ry-R>40 && Rx+R<620 && Ry+R<445) {/*如果半径和初始状态一样大,则保留原来的圆*/ if(R==r){setcolor(WHITE);R-=10;circle(Rx,Ry,R);}else{setcolor(BLACK);/*用背景色画圆,覆盖原有的*/circle(Rx,Ry,R);setcolor(WHITE);/*减小半径*/R-=10;circle(Rx,Ry,R);}}}}DrawMouse(x1,y1);}}DrawMouse(last_x,last_y);}/*求阶乘函数*/long factorial(int n){long s=1;if(n==0)return 1;while(n>0){s*=n;n--;}return s;}/*伯恩斯坦基函数*/float berFunction(int i,int n,double t){if(i==0&&t==0||t==1&&i==n)return 1;else if(t==0||t==1)return 0;return factorial(n)/(factorial(i)*factorial(n-i))*pow(t,i)*pow(1-t,n-i); }/*绘制Bezier曲线函数*/void DrawBezier(){int x,y,x0,y0,x1,y1;float j,t,dt;int i,n;int endFlag=0;int last_x=0,last_y=0;n=0;DrawMouse(last_x,last_y);while(mouseStatus(&x1,&y1)==LEFT_PRESSED);while(1){while((mouseStatus(&x1,&y1)==RIGHT_PRESSED))endFlag=1;if(endFlag==1)break;/*如果有两个以上的点,则将其连接,即画直线*/if(n>1)line(linePoint_x[n-1],linePoint_y[n-1],linePoint_x[n-2],linePoint_y[n-2]);/*移动鼠标*/while(mouseStatus(&x1,&y1) == NO_PRESSED){if(last_x!=x1||last_y!=y1){DrawMouse(last_x,last_y);DrawMouse(x1,y1);last_x=x1;last_y=y1;}}/*单击左键时,绘制点*/while(mouseStatus(&x0,&y0)==LEFT_PRESSED); putpixel(x0,y0,14);/*记录每次鼠标左键单击的点坐标*/linePoint_x[n]=x0;linePoint_y[n]=y0;n++;}DrawMouse(x1,y1);dt=1.0/10;setwritemode(0);for(j=0;j<=10;j+=0.5){t=j*dt;x=0;y=0;i=0;while(i<n-1){x+=berFunction(i,n-2,t)*linePoint_x[i];y+=berFunction(i,n-2,t)*linePoint_y[i];i++;}if(j==0)moveto(x,y);lineto(x,y);}setwritemode(1);}void main(){int gdriver,gmode;int x0,y0,x1,y1;int last_x,last_y;int i;x0=250;y0=250;gdriver=DETECT;while( 1){initgraph(&gdriver,&gmode,"");setbkcolor(0);setcolor(14);/*绘制画布*/rectangle(5,30,630,445);setfillstyle(1,2);/*填充画布以外的颜色,画布仍呈背景色*/ floodfill(10,10,14);/*绘制按钮框*/for(i=0;i<=7;i++){setcolor(RED);line(60*i+1,2,60*i+1,25);line(60*i+1,2,60*i+55,2);setcolor(RED);line(60*i+1,25,60*i+55,25);line(60*i+55,2,60*i+55,25);}setcolor(RED);line(0,446,639,446);line(0,478,639,478);setcolor(8);/*绘制退出按钮框*/rectangle(570,2,625,25);setfillstyle(1,RED);floodfill(620,5,8);setcolor(WHITE);outtextxy(585,10,"EXIT");/*显示“直线”*/outChinese(zhi16K, 16, 10,6, WHITE); outChinese(xian16K, 16, 28,6, WHITE);/*显示“矩形”*/outChinese(ju16K, 16, 70,6, WHITE);outChinese(xing16K, 16, 88,6, WHITE);/*显示“圆形”*/outChinese(yuan16K, 16, 130,6, WHITE); outChinese(xing16K, 16, 148,6, WHITE);outtextxy(185,10,"Bezier");/*显示“清屏”*/outChinese(qing16K, 16, 250,6, WHITE); outChinese(ping16K, 16, 268,6, WHITE);/*显示“保存”*/outChinese(bao16K, 16, 310,6, WHITE);outChinese(cun16K, 16, 328,6, WHITE);/*显示“加载”*/outChinese(jia16K, 16, 370,6, WHITE);outChinese(zai16K, 16, 388,6, WHITE);/*显示“帮助”*/outChinese(bang16K, 16, 430,6, WHITE);outChinese(zhu16K, 16, 448,6, WHITE);setMousePos(x0,y0);setwritemode(1);DrawMouse(x0,y0);last_x=x0;last_y=y0;while(!((mouseStatus(&x1,&y1)==NO_PRESSED) && x1>240 &&x1<295&&y1>1&&y1<25)){/*单击退出按钮*/if((mouseStatus(&x1,&y1)==NO_PRESSED) && x1>570 &&x1<625&&y1>1&&y1<25)exit(0);/*鼠标移动*/while(mouseStatus(&x1,&y1) == NO_PRESSED||y1>25){if(last_x!=x1 && last_y!=y1){DrawMouse(last_x,last_y);DrawMouse(x1,y1);last_x=x1;last_y=y1;}}DrawMouse(last_x,last_y);/*在按钮框中单击左键后*/while(mouseStatus(&x1,&y1)==LEFT_PRESSED);/*绘制直线*/if(x1>0 && x1<60 && y1>1 && y1<25){setwritemode(0);setcolor(8);/*呈凹陷状态*/line(1,2,1,25);line(1,2,55,2);setcolor(15);line(1,25,55,25);line(55,2,55,25);setwritemode(1);DrawLine();setwritemode(0);setcolor(RED);/*还原成初始状态*/rectangle(1,2,55,25);setcolor(15);setwritemode(1);DrawMouse(last_x,last_y);}/*绘制矩形*/if(x1>60 && x1<115 && y1>1 && y1<25) {setwritemode(0);setcolor(8);line(61,2,61,25);line(61,2,115,2);setcolor(15);line(61,25,115,25);line(115,2,115,25);setwritemode(1);DrawRectangle();setwritemode(0);setcolor(RED);rectangle(61,2,115,25);setcolor(15);setwritemode(1);DrawMouse(last_x,last_y);}/*绘制圆形*/if(x1>120 && x1<175 && y1>1 && y1<25) {setwritemode(0);setcolor(8);line(121,2,121,25);line(121,2,175,2);setcolor(15);line(121,25,175,25);line(175,2,175,25);setwritemode(1);DrawCircle();setwritemode(0);setcolor(RED);rectangle(121,2,175,25);setcolor(15);setwritemode(1);DrawMouse(last_x,last_y);}/*绘制Bezier曲线*/if(x1>180 && x1<235 && y1>1 && y1<25) {setwritemode(0);setcolor(8);line(181,2,181,25);line(181,2,235,2);setcolor(15);line(181,25,235,25);line(235,2,235,25);setwritemode(1);DrawBezier();setwritemode(0);setcolor(RED);rectangle(181,2,235,25);setcolor(15);setwritemode(1);DrawMouse(last_x,last_y);}/*保存文件*/if(x1>300 && x1<355 && y1>1 && y1<25) {setwritemode(0);setcolor(8);line(301,2,301,25);line(301,2,355,2);setcolor(15);line(301,25,355,25);line(355,2,355,25);setwritemode(1);save();setwritemode(0);setcolor(RED);rectangle(301,2,355,25);setcolor(15);setwritemode(1);DrawMouse(last_x,last_y);}/*加载已有的文件*/if(x1>360 && x1<415 && y1>1 && y1<25) {setwritemode(0);setcolor(8);line(361,2,361,25);line(361,2,415,2);setcolor(15);line(361,25,415,25);line(415,2,415,25);setwritemode(1);load();setwritemode(0);setcolor(RED);rectangle(361,2,415,25);setcolor(15);setwritemode(1);DrawMouse(last_x,last_y);}/*显示用户帮助*/if(x1>420 && x1<475 && y1>1 && y1<25) {setwritemode(0);setcolor(8);line(421,2,421,25);line(421,2,475,2);setcolor(15);line(421,25,475,25);line(475,2,475,25);setwritemode(1);showHelp();setwritemode(0);setcolor(RED);rectangle(421,2,475,25);setcolor(15);setwritemode(1);DrawMouse(last_x,last_y);}}closegraph();}}。

c语言编程图形

c语言编程图形
printf("+ +++ +\n");
printf(" +\n");
}
printf("\n");
}
int deng(){\\*打印等号
int i;
printf("\n");
for(i=0;i<3;i++)
printf(" | |\n");
printf("\n");
}
int wen(){\\*打印一个问号
printf(" **\n");
printf(" * *\n");
printf(" * *\n");
printf(" *\n");
printf(" *\n");
printf(" *\n");
printf("\n");
printf(" @\n");
}
6、总结:程序分工:矩形的模块由艾猛设计;菱形的模块由覃川,其他程序由张博学和许周礼设计。
}
for(j=0;j<2;j++)
{
for(i=0;i<=j;i++)
printf(" ");
for(i=0;i<3-2*j;i++)
printf("*");
printf("\n");
}
}
int jia(){\\*打印加号
int i;
printf("\n");

C语言图形编程

C语言图形编程

C图形编程一、字符屏幕一、屏幕操作函数1. clrscr()清除字符窗口函数2. window()字符窗口函数3. gotoxy()光标定位函数4. clreol() 清除光标行尾字符函数5. insline() 插入空行函数6. delline() 删除一行函数7. gettext() 拷进文字函数8. puttext() 拷出文字函数9. movetext() 移动文字函数二、字符属性函数10. textmode() 文本模式函数11. highvideo()高亮度函数12. lowvideo() 低亮度函数13. normvideo(void);14. textcolor() 文本颜色函数15. textattr() 文本属性函数16.textbackground() 文本背景函数三、屏显状态函数17. wherex() 光标处x坐标函数18. wherey() 光标处y坐标函数19. gettextinfo() 获取文本窗口信息函数在Borland C++里面提供了字符屏幕和图形函数。

字符屏幕的核心是窗口(Window),它是屏幕的活动部分,字符输出或显示在活动窗口中进行。

窗口在缺省时,就是整个屏幕。

窗口可以根据需要指定其大小。

同样,对图形函数的操作,也提供了(Viewport)。

也就是说图形函数的操作都是在视口上进行。

图形视口与字符窗口具有相同的特性,用户可以在屏幕上定义大小不同的视口,若不定义视口大小,它就是整个屏幕。

窗口是在字符屏幕下的概念,只有字符才能在窗口中显示出来,这时用户可以访问的最小单位为一个字符。

视口是在图形屏幕状态下的概念,文本与图形都可以在视口上显示,用户可访问的最小单位是一个像素(像素这一术语最初用来指显示器上最小的、单独的发光点单元。

然而现在,其含义拓宽为指图形显示器上的最小可访问点)。

字符和图形状态下,屏幕上的位置都是由它们的行与列所决定的。

有一点须指出:字符状态左上角坐标为(1,1),但图形左上角坐标为(0,0)。

C语言打印图形

C语言打印图形
for(j=1;j<=n;j++)printf("*");
printf("\n");}}
1-3. 编程,输入n值,输出如下例(n=4)所示的图形:
*
***
*****
*******
————
main()
{int i,j,n;
scanf("%d",&n);
for(i=1;i<=n;i++)
{for(j=1;j<=n-i;j++)printf(" ");
******
**** 当 n=4 时
————
main()
{int i,j,k,n;
printf("\nInput n=");
scanf("%d",&n);
for(i=1;i<=2*n-1;i++)
{if(i<=n)k=i;else k=2*n-i;
for(j=1;j<=n-k;j++)printf(" ");
for(j=1;j<=2*k-2+n;j++)printf("*");
printf("\n");}}
1-9. 编程,输入n值,输出如下例(n=4)所示的图形:
****
*
*
****
————
main()
{
int i,j,n;
printf("\nInput n=");
scanf("%d",&n);

C语言图形编程

C语言图形编程
用法: 此函数调用方式为void getviewsettings(struct viewporttype *info);
说明: 该函数执行后,把有关当前视口的信息装入info指向的viewporttype型结构中。
viewporttype结构定义如下:
struct viewporttype {
说明: 参数left,top是左上角坐标,right,bottom是右下角坐标,它们都是绝对屏幕坐标。
传给setviewport()的第五个参数是clip,如果clip为1,则超出视口的输出图形自动被裁剪掉,即所有作图限制于当前图形视口之内,如果clip为0,则不做裁剪,即作图将无限制地扩展于视口周界之外,直到屏幕边界。若无效参数传入setviewport(),则graphresult()函数返回值-11,先前视口设置仍有效。
BROWN(棕色) 6 YELLOW(黄色) 14
LIGHTGRAY(淡灰) 7 WHITE(白色) 15
-----------------------------------------------------------------
三、屏幕位置函数
50. getmaxx()返回最大x坐标函数
51. getmaxy() 返回最大y坐标函数
52. getx() 返回x坐标函数
53. gety() 返回y坐标函数
54. moveto()函数
55. moverel() 相对移动函数
一、屏幕和视口设置与清除函数
36. setviewport() 设置图形视口函数
功能: 函数setviewport() 设置当前图形视口。
用法: 函数调用方式为void setviewport(int left,int top,int right,int bottom,int clip);

c语言心形代码及图形

c语言心形代码及图形

#include<stdio.h>#include<math.h>#include <windows.h>#define r 10#define R 172int main(void){FILE *fp;int n;if((fp=fopen("LOVE.txt","w"))==NULL){printf("File open error!\n");exit(0);}int i,j,e;int a;for(i=1,a=r;i<r/2;i++,a--){for(j=(int) ( r-sqrt((r*r-(a-i)*(a-i))) );j>0;j--) {printf(" ");fprintf(fp,"%s"," ");}for(e=1;e<=2*sqrt((r*r-(a-i)*(a-i)));e++){printf("\3");fprintf(fp,"%s"," * ");}for(j=(int) ( 2*( r-sqrt((r*r-(a-i)*(a-i)))) );j>0;j--) {printf(" ");fprintf(fp,"%s"," ");}for(e=1;e<=2*sqrt( (r*r-(a-i)*(a-i)) );e++){printf("\3");fprintf(fp,"%s"," * ");}printf("\n");fprintf(fp,"%s","\n");}for(i=1;i<40;i++){if(i==6){printf("(∩_∩)I LOVE MY MOTHER(∩_∩)");i+=30;}printf("\3");fprintf(fp,"%s"," * ");}printf("\n");for(i=1;i<=R/2;i++){if(i%2||i%3)continue;for(j=(int) ( R-sqrt( (double) (R*R-i*i) ) );j>0;j--){printf(" ");fprintf(fp,"%s"," ");}for(e=1;e<=2*( sqrt( (double)(R*R-i*i) ) - (R-2*r) );e++) {printf("\3");fprintf(fp,"%s"," * " );}printf("\n");}printf("请选着播放形式:\n自动播放:按 1 ,控制播放:按 0\n"); printf("按完数字后请按enter键\n");scanf("%d",&n);if(n==0){while(1){system("color a");system("pause");system("color b");system("pause");system("color c");system("pause");system("color d");system("pause");system("color e");system("pause");system("color f");system("pause");}}else{while(1){system("color a");Sleep(100);system("color b");Sleep(100);system("color c");Sleep(100);system("color d");Sleep(100);system("color e");Sleep(100);system("color f");Sleep(100);system("color 0");Sleep(100);}}return 0;}(注:专业文档是经验性极强的领域,无法思考和涵盖全面,素材和资料部分来自网络,供参考。

c语言跳动爱心代码

c语言跳动爱心代码

C语言跳动爱心代码1. 简介本文将介绍如何使用C语言编写一个跳动的爱心代码。

该代码将在终端中显示一个跳动的爱心图案,给人一种温馨浪漫的感觉。

2. 实现思路要实现跳动的爱心图案,我们需要使用C语言的图形库来进行绘制。

在本文中,我们将使用ncurses库来实现。

ncurses库是一个用于控制终端屏幕的库,它提供了一系列函数来进行字符画和动画的绘制。

我们可以使用它来在终端中显示各种图案,并且可以通过控制字符的位置和颜色来实现动画效果。

具体而言,我们将使用ncurses库来实现以下功能:•清空屏幕•设置字符颜色•绘制爱心图案•控制爱心图案的位置和大小•控制爱心图案的颜色•控制爱心图案的跳动效果下面将详细介绍每个功能的具体实现方法。

3. 实现步骤3.1 准备工作在开始编写代码之前,我们需要先安装并配置ncurses库。

你可以通过以下命令来安装:sudo apt-get install libncurses5-dev安装完成后,我们可以开始编写代码了。

3.2 清空屏幕为了实现动画效果,我们需要在每一帧更新之前先清空屏幕。

ncurses库提供了一个函数clear()来实现这个功能。

我们只需要在每一帧的开头调用这个函数即可。

#include <ncurses.h>int main() {initscr(); // 初始化终端clear(); // 清空屏幕// 其他代码...endwin(); // 结束终端return 0;}3.3 设置字符颜色要实现跳动的爱心效果,我们需要通过改变字符的颜色来进行动画。

ncurses库提供了一系列函数来设置字符的颜色。

首先,我们需要调用start_color()函数来启用颜色功能:start_color();然后,我们可以使用init_pair()函数来定义字符和颜色对之间的映射关系。

例如,下面的代码将字符’@’和红色关联起来:init_pair(1, COLOR_RED, COLOR_BLACK);最后,我们可以使用attron()函数来激活所定义的颜色对,并将其应用到要打印的字符上:attron(COLOR_PAIR(1));printw("@");attroff(COLOR_PAIR(1));3.4 绘制爱心图案为了绘制爱心图案,我们需要定义一个函数draw_heart()来实现。

C语言图形编程(三、绘图函数-02)9

C语言图形编程(三、绘图函数-02)9
setcolor(GREEN);
rectangle(80,200,200,300)
setfillstyle(HATCH_FILL,RED);
floodfill(160,240,GREEN);
getch();
restorecrtmode();
}
77. setfillpattern() 设置用户图样函数
xHATCH_FILL 8 斜网格线填充
INTEREAVE_FILL 9 间隔点填充
WIDE_DOT_FILL 10 大间隔点填充
CLOSE_DOT_FILL 11 小间隔点填充
{
int driver,mode;
static char p[8]={10,20,30,40,50,60,70,80};
driver=DETECT;
mode=0;
initgraph(&driver,mode,"");
setcolor(GREEN);
rectangle(80,200,220,300);
用法: 该函数调用方式为void floodfill(int x,int y,int bordercolor);
说明: 这里参数(x,y)为指定填充区域中的某点,如果点(x,y)在该填充区域之外,那么外部区域将被填充,但受图形视口边界的限制。如果直线定义的区域出现间断,那么将导致泄漏,即使很小的间断,也将导致泄漏。也就是说,间断将引起区域外被填充�
USER_FILL 12 用户定义图样填充
-------------------------------------------------------------------
除了EMPTy_FILL,所有填充图样都使用当前填充色,填充图样USER_FILL只有在用函数setfillpattern()已经建立一个用户定义的填充图样后才能使用。

计算机图形学c语言代码(笑脸、时钟、还有一个实在是不好意思说)

计算机图形学c语言代码(笑脸、时钟、还有一个实在是不好意思说)

计算机图形作业费了很大脑子写出来的!!!1、时钟(鄙人最得意的一个作品)#include<graphics.h>#include<math.h>#include<dos.h>#define pi 3.1415926#define X(a,b,c) x=a*cos(b*c*pi/180-pi/2)+300;#define Y(a,b,c) y=a*sin(b*c*pi/180-pi/2)+240;#define d(a,b,c,d) X(a,b,c);Y(a,b,c);Bline(300,240,x,y,d)void plot_circle_points(int xc, int yc, int x, int y, int c){putpixel(xc+x, yc+y, c);putpixel(xc-x, yc+y, c);putpixel(xc+x, yc-y, c);putpixel(xc-x, yc-y, c);putpixel(xc+y, yc+x, c);putpixel(xc-y, yc+x, c);putpixel(xc+y, yc-x, c);putpixel(xc-y, yc-x, c);}void Bcircle (int xc, int yc, int radius, int c){int x, y, p;x=0;y=radius;p=3-2*radius;while (x<y){plot_circle_points(xc, yc, x, y, c);if (p<0) p=p+4*x+6;else{p=p+4*(x-y)+10;y-=1;}x+=1;}if (x == y)plot_circle_points(xc, yc, x, y, c);}void Bline (int x1, int y1, int x2, int y2, int c){int x, y, tmp;int dx, dy, d;float k;if( 0 == (x1 - x2)){x = x1;if(y1 > y2){ tmp = y1;y1 = y2; y2 =tmp;}for(y = y1; y < y2; y ++){putpixel(x, y, abs(getpixel(x,y)-c));}return;}k = (float)(y2 -y1)/(float)(x2 - x1);if(k > 1.0){tmp = x1; x1 = y1; y1 = tmp;tmp = x2; x2 = y2; y2 = tmp;}else if(k > 0){}else if(k < -1.0){x1 = -x1;x2 = -x2;tmp = x1; x1 = y1; y1 = tmp;tmp = x2; x2 = y2; y2 = tmp;}else if( k < 0){y1 = - y1;y2 = - y2;}else{y = y1;if(x1 > x2){ tmp = x1; x1 = x2; x2 = tmp;}for(x = x1; x <= x2; x ++){putpixel(x, y, abs(getpixel(x,y)-c));}return;}if(x1 > x2){tmp = x1; x1 = x2; x2 = tmp;tmp = y1; y1 = y2; y2 = tmp;}dx = x2 - x1;dy = y2 - y1;d = 2 * dy - dx;x = x1; y = y1;for(; x < x2; x ++){if(k > 1){putpixel(y, x, abs(getpixel(y, x) - c));}else if(k > 0){putpixel(x, y, abs(getpixel(x,y)-c));}else if( k < -1){putpixel(-y, x, abs(getpixel(-y,x)-c));}else if(k < 0){putpixel(x, -y, abs(getpixel(x,-y)-c));}else {}if(d >= 0){y++;d+=2*dy-2*dx;}else{d+=2*dy;}}}void init(){int i,l,x1,x2,y1,y2;setbkcolor(1);Bcircle(300,240,200,15);Bcircle(300,240,205,15);Bcircle(300,240,5,15);for(i=0;i<60;i++){if(i%5==0) l=15;else l=5;x1=200*cos(i*6*pi/180)+300;y1=200*sin(i*6*pi/180)+240;x2=(200-l)*cos(i*6*pi/180)+300;y2=(200-l)*sin(i*6*pi/180)+240;Bline(x1,y1,x2,y2,15);}}void main(){int x,y;int gd,gm;unsigned char h,m,s;struct time t[1];detectgraph(&gd, &gm);initgraph(&gd,&gm," ");init();gettime(t);h=t[0].ti_hour;m=t[0].ti_min;s=t[0].ti_sec;d(150,h,30,7);d(170,m,6,14);d(190,s,6,4);while(!kbhit()){while(t[0].ti_sec==s)gettime(t);sound(400);delay(70);sound(200);delay(30);nosound();d(190,s,6,4);s=t[0].ti_sec;d(190,s,6,4);if (t[0].ti_min!=m){d(170,m,6,14);m=t[0].ti_min;d(170,m,6,14);}if (t[0].ti_hour!=h){d(150,h,30,7);h=t[0].ti_hour;d(150,h,30,7);sound(1000);delay(240);nosound();delay(140);sound(2000);delay(240);nosound();}}}2、笑脸(初学者作品很漂亮的!)#include "Conio.h"#include "graphics.h"#define closegr closegraphvoid initgr(void){int graphdriver=DETECT, graphmode=0;initgraph(&graphdriver, &graphmode, " "); }int main(){int i,j;initgr();setbkcolor(0);cleardevice();setcolor(2);circle(320,240,200);setcolor(14);line(320,280,320,200);ellipse(230,210,40,140,70,60);ellipse(410,210,40,140,70,60);ellipse(320,220,220,320,120,140);outtextxy(500,450,"xiao xiao!");getch();closegraph();return 0;}3、电扇(只能叫这个了本来想画车轮,没想到。

C语言图形化编程基础入门

C语言图形化编程基础入门

二、C 的图形模式编程2.1图形编程基础VC+EasyX 库里提供了图形函数就可以在VC 环境下进行图形编程。

对图形函数的操作都是在视口(Viewport )上进行。

用户可以在屏幕上定义大小不同的视口,若不定义视口大小,它就是整个屏幕。

视口是在图形屏幕状态下的概念,用户可访问的最小单位是一个像素(像素这一术语最初用来指显示器上最小的、单独的发光点单元。

然而现在,其含义拓宽为指图形显示器上的最小可访问点)。

文本与图形都可以在视口上显示。

图形视口的左上角坐标为(0,0)。

例如:分辨率为640*480的视口像素点的定位显示器在图形模式下工作时,显示的单位是像素点,通过控制各像素点的颜色和灰度等级来形成图形。

因此绘图的第一步是进行图形模式的初始化,系统进入绘图模式。

(1) initgraph() 图形初始化函数用法: HWND initgraph(int width,int height,int flag = NULL);示例:以下局部代码创建一个尺寸为 640x480 的绘图环境:initgraph(640, 480);例2-1:调用initgraph()设置640*480的图形模式,在屏幕中央显示如下的图形。

参考代码:#include<graphics.h>#include <conio.h>int main(){initgraph(640, 480);line(200, 240, 440, 240);line(320, 120, 320, 360);getch();(closegraph();return 0;}[学习单步执行]试着单步执行刚才的程序,由于绘图和多线程等因素的限制,请务必按照以下步骤尝试(熟练了以后就不用了):1. 将VC取消最大化,并缩小窗口,能看到代码就行。

2. 按一下F10(单步执行),会看到屏幕上出现一个黄色的小箭头,指示将要执行的代码。

3. 当箭头指向initgraph()语句时,按F10,能看到窗口发生了变化。

猪头的c语言编码

猪头的c语言编码

猪头的c语言编码以下是一个简单的猪头图案的C语言代码:
```c
include <>
int main() {
int i, j, n = 5; // n为猪头图案的行数
for (i = 1; i <= n; i++) {
for (j = 1; j <= n - i; j++) {
printf(" "); // 输出空格
}
for (j = 1; j <= 2 i - 1; j++) {
printf(""); // 输出猪头图案的左侧部分
}
printf("\n"); // 换行
}
for (i = n - 1; i >= 1; i--) {
for (j = 1; j <= n - i; j++) {
printf(" "); // 输出空格
}
for (j = 1; j <= 2 i - 1; j++) {
printf(""); // 输出猪头图案的右侧部分
}
printf("\n"); // 换行
}
return 0;
}
```
这个代码使用了两个循环,第一个循环用于输出猪头图案的左侧部分,第二个循环用于输出猪头图案的右侧部分。

在每个循环中,都使用了嵌套的循环来输出空格和星号。

通过调整循环变量的值,可以控制猪头图案的大小和形状。

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
unsigned long bixpolspermeter;
unsigned long biypelsPermeter;
unsigned long biclrused;
unsigned long biclrImportant;
}
bitmapinfo;
typedef struct RGB_BMP_TYP{
/*.......................................................*/
#include"bmp.c"
#include"vga256.c"
#include"hz.c"
void fastbmp(int y,char far *video_b){ /*BMP文件显示分页显示涵数 */
outp(PALETTE_MASK,0xff);
outp(PALETTE_REGISTER_WR,index);
outp(PALETTE_DATA,color->red);
outp(PALETTE_DATA,color->green);
outp(PALETTE_DATA,color->blue);
unsigned char blue;
unsigned char green;
unsigned char red;
unsigned char reserved;
}RGB_BMP,*RGB_BMP_PRT;
typedef struct bmp_picture_typ{
printfhz("打开文件成功",200,100);
getch();
read(fp,&bmp256.file,sizeof(bitmapfile));
read(fp,&,sizeof(bitmapinfo));
int86(0x10,&r,&r);
}
void fy(int xx)
{ /*分页*/
union REGS r;
r.x.ax=0x4f05;
r.x.bx=0;
r.x.dx=xx;
for(i=0;i&lt;16;i++)
for(j=0;j&lt;8;j++)
{
if(bitdata[2*i]&bit[j])
fast(x+j,i+y);
if(bitdata[2*i+1]&bit[j])
fast(x+8+j,i+y);
}
}
自己以前编写的C语言图形编程代码
自己以前编写的图形编程代码实现DOS下256BMP图片显示,中文注释,中文汉字显示
写的不好,给大家交流与学习,TC3.0与TC2.0下编译通过,实DOS下才能够运行
VGA256.C文件
/*.................................................*/
unsigned char bit[8]={128,64,32,16,8,4,2,1};
unsigned char far *video=(char far *)0xA0000000L;
int color=7,bkcolor=7;
typedef struct BMP_file
{
unsigned int bftype;
int printfhz(char *str,int x,int y) /*显示汉字串*/
{
int num,i,xx;
num=strlen(str);
xx=x;
for(i=0;i&lt;num;i+=2)
#define maxx 800
#define maxy 600
#define PALETTE_MASK 0x3c6
#define PALETTE_REGISTER_RD 0x3c7
#define PALETTE_REGISTER_WR 0x3c8
#define PALETTE_DATA 0x3c9
char color=2;
void vga256()
{
union REGS r;
r.x.bx=0x103; /*这里修改成适合你显卡驱动800*600的中断就可以了,我的是英特尔810的集成显卡驱动*/
r.x.ax=0x4f02;
{
printf("open File error!\n");
exit(0);
}
fseek(st,fpos,SEEK_SET);
fread(bitdata,32,1,st);
fclose(st);
}
#include&lt;stdio.h&gt;
#include&lt;bios.h&gt;
#define maxx 800 /*这里决定了分辨率为800*600,方便屏幕绘图*/
#define maxy 600
unsigned char far *video_buffer=(unsigned char far *)0xA0000000L;
printfhz("BMP文件被压缩过的无法打开",100,120);
exit(1);}
if(bmp->info.bibitcount!=8){
printfhz("NO这不是256色图片",100,120);
exit(1); }
}
示例演示代码
int86(0x10,&r,&r);
}
void fast(int x,int y)
{ /*写点程序代码*/
static long i=0;
int xx=0;
static int t=0;
if(x&lt;maxx){
bitmapfile file;
bitmapinfo info;
RGB_BMP palette[256];
char far *buffer;
} bmp_picture,*bmp_picture_ptr;
void set_bmp_palette_register(int index,RGB_BMP_PRT color){
void writehz(char hz0,char hz1,int x,int y) /*显示汉字*/
{
register int i,j;
unsigned vpos;
char bitdata[32];
openhz(hz0,hz1,bitdata);
#include<dos.h>
#include<string.h>
#include<math.h>
#include<stdio.h>
#include<bios.h>
#include<mem.h>
#include<fcntl.h>
#include<stdlib.h>
#include<conio.h>
check_bmp((bmp_picture_ptr)&bmp256);
lseek(fp,54,0);
for(i=0;i<256;i++){
read(fp,&bmp256.palette.blue,1);
read(fp,&bmp256.palette.
unsigned long biheight;
unsigned int biplanes;
unsigned int bibitcount;
unsigned long bicompression;
unsigned long bisizeImage;
FILE *st;
long fpos;
fpos=32L*(((unsigned char)hz0-161)*94+((unsigned char)hz1-161));
if((st=fopen("hzk16","rb"))==NULL) /*打开字库文件hzk16,该文件可以在UCDOS里面找到*/
}
void check_bmp(bmp_picture_ptr bmp){
if(bmp->file.bftype!=0x4d42)
{ printfhz("不是BMP文件",100,100);
exit(1);}
if(bmp->info.bicompression!=0){
Hz.C文件
/*.................................................*/
#include&lt;stdio.h&gt;
char bit[8]={128,64,32,16,8,4,2,1};
void openhz(char hz0,char hz1,char *bitdata) { /* 打开字庫*/
unsigned long bfsize;
unsigned int reserved1;
unsigned int reserved2;
unsigned long bfOffset;
}
相关文档
最新文档