




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、-作者xxxx-日期xxxx画图软件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
2、键*/#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 25926/*定义全局变量*/int Rx,Ry,R;int TOPx,TOPy,BOTTOMx,BOTTOMy;int Centx,Centy;int lineS
3、tartx,lineStarty,lineEndx,lineEndy;int linePoint_x20,linePoint_y20;/*这里的字模数组均由“点阵字模工具”生成,你可以用你自己需要的点阵信息来替换示例中的字模信息,注意字模大小要一致,否则显示会出问题。*/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,0
4、x08,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=/*
5、 以下是 '矩' 的 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,0x
6、08,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
7、,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 ping16
8、K=/* 以下是 '屏' 的 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
9、,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,0x
10、A0,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 zai16
11、K=/* 以下是 '载' 的 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,0x1
12、C,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,0
13、x88,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);vo
14、id 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)/*依次:字模指针、点阵大小、起始坐标(
15、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(matj * 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,
16、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 Us
17、e 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
18、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); out
19、textxy(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 b
20、utton 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 *f
21、p; char fileName20; fill(0,447,630,477,2); gotoxy(1,25); printf("nnnn 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
22、,"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 fileName20; FILE *fp; fill(0,447,630,477,2); gotoxy(1,25); printf("nnnn Input t
23、he 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,
24、"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; /*入口参数AH3,读取鼠标位置及其按钮状态*/ inregs.x.ax=3; i
25、nt86(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; /*入口参数AH4,设置鼠标
26、指针位置*/ 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()
27、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(mo
28、useStatus(&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(&am
29、p;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; /*旋转*
30、/ 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(lineS
31、tartx=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) /*清除原有的直线*/ setwritemo
32、de(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(p
33、i/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 &&am
34、p; 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 && lineEnd
35、x <=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
36、&& 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 && li
37、neEndy <=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 &l
38、t;=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;
39、/*计算放大后的起始坐标*/ 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
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 重症手足口的护理
- 2025标准合同文本
- 洗菜设备出售合同范本
- 空调租赁合同范本
- 聊城落户购房合同范本
- 电梯广告门合同范本
- 房屋施工安全合同范本
- 租赁山地合同
- 防止门脉高压的护理
- 陶瓷饰品创新创业大赛
- 2023年河南工业和信息化职业学院单招面试题库及答案解析
- 国企治理三会一层详解
- GB/T 6081-2001直齿插齿刀基本型式和尺寸
- GB/T 3717-1983测长机
- GB/T 19189-2011压力容器用调质高强度钢板
- 【农业养殖技术】花鲈淡水池塘标准化养殖技术
- 政治学基础课件全部终稿
- 酒店运营管理课件
- 中国古代建筑理论知识考核试题与答案
- 山东省青岛市各县区乡镇行政村村庄村名居民村民委员会明细
- 绿色建筑评价评分表
评论
0/150
提交评论