| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1672 人关注过本帖
标题:[原创]一个篆印图标制作的小工具
只看楼主 加入收藏
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
结帖率:92.86%
收藏
 问题点数:0 回复次数:2 
[原创]一个篆印图标制作的小工具

因为写一个程序封面要用到一个篆印做标记,所以临时写了一个小工具。

说明:

1。点左键置点,同时按左右键(其实应该是点右键,但是我用的mouse有点怪程别人不一样^_^)

消点.由于是调用了中断来显示鼠标,所以请在98,win me,ccdos,msdos...下使用^_^.

2。只是临时用用,所以功能吗......嘿嘿,自己扩充,

3。原来写的算法和这个不一样,改了一下,这样就可以和win-tc自带的字模函数配合用。最后得到的数据,相当一个24*24点阵的汉字字模.

/**********************************************/ /* 程序名称:图标制作(篆印制作) */ /* 程序作者:Knocker */ /* 完成日期:2004.10.7 */ /* 编译环境:Windows me + Win-TC 1.9.1 */ /* Email : knocker.k@163.com */ /**********************************************/

#include<dos.h> #include "Conio.h" #include "graphics.h"

#define TRUE 1 #define FALSE 0 int mouse_installed=FALSE ;

void Stars(int stars); void ShowPane(int*mat,int matsize,int x,int y,int color); void SavePane(int*mat,int paneX,int paneY,int m); void Meun(); int HideMouse(); int GetPressInfo(int button); int GetMouseXY(int*x,int*y); int InitMouse(); int ShowMouse(); void initgr(void); void pane(int x,int y,int paneX,int paneY,int pane_size,int pane_color); void fillpane(int x,int y,int pane_size,int fill_pane_color);

int main(void) { int startX=100,startY=100 ; /*方格起始位置*/ int pane_size=10 ; /*方格的大小*/ int pane_line_color=14 ; /*格线的color*/ int pane_filly_color=12 ; /*填充方格的color */ int paneX=24,paneY=24 ; /*点阵大小*/ int MouseX,MouseY ; /*mouse的位置*/ int tempX,tempY ; /*char key=0; */ int Temp[72]= { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, } ; char c='n'; initgr(); /* BGI初始化 */ Stars(2500); InitMouse(); Meun(); pane(startX,startY,paneX,paneY,pane_size,pane_line_color); ShowMouse(); while(c!='y') { while(!bioskey(1)) { if(GetPressInfo(0)==1) { GetMouseXY(&MouseX,&MouseY); tempX=(MouseX-startX)/pane_size ; tempY=(MouseY-startY)/pane_size ; if(MouseX>startX&&MouseY>startY) if((tempX>=0&&tempX<paneX)&&(tempY>=0&&tempY<paneY)) { HideMouse(); fillpane(startX+tempX*pane_size,startY+tempY*pane_size,pane_size,pane_filly_color); ShowMouse(); SavePane(Temp,tempX,tempY,1); } if(GetPressInfo(1)==1) { GetMouseXY(&MouseX,&MouseY); tempX=(MouseX-startX)/pane_size ; tempY=(MouseY-startY)/pane_size ; if(MouseX>startX&&MouseY>startY) if((tempX>=0&&tempX<paneX)&&(tempY>=0&&tempY<paneY)) { HideMouse(); fillpane(startX+tempX*pane_size,startY+tempY*pane_size,pane_size,0); ShowMouse(); SavePane(Temp,tempX,tempY,0); } } ShowPane(Temp,24,500,150,12); } } getch(); setcolor(BLUE); outtextxy(50,430,"Do you confirm that want to withdraw from the procedure ?(y or n)"); c=getch(); if(c=='y')break; setcolor(BLACK); outtextxy(50,430,"Do you confirm that want to withdraw from the procedure ?(y or n)"); graphdefaults(); }

closegraph(); clrscr(); printf("要打印点阵数据吗? (y or n)\n"); c=getch(); if(c=='y') for(paneX=1;paneX<=72;paneX++) { printf("%4d,",Temp[paneX-1]); if(paneX%8==0)printf("\n"); } return 0 ; } /* BGI初始化 */ void initgr(void) { int gd=DETECT,gm=0 ; /* 和gd = VGA,gm = VGAHI是同样效果 */ registerbgidriver(EGAVGA_driver); /* 注册BGI驱动后可以不需要.BGI文件的支持运行 */ initgraph(&gd,&gm,""); } void pane(int x,int y,int paneX,int paneY,int pane_size,int pane_color) /* x,y为方格起始坐标,paneX,paneY为X,Y方向方格数,pane_size为方格大小*/ { int i ; setcolor(pane_color); for(i=0;i<=paneX;i++) line(x+i*pane_size,y,x+i*pane_size,y+paneY*pane_size); for(i=0;i<=paneY;i++) line(x,y+i*pane_size,x+paneX*pane_size,y+i*pane_size); } void fillpane(int x,int y,int pane_size,int fill_pane_color) /*x,y为方格的顶点坐标,pane_size为方格大小,fill_pane_color为填充色*/ { setfillstyle(SOLID_FILL,fill_pane_color); bar(x+1,y+1,x+pane_size-1,y+pane_size-1); } /*=========Mouse处理============*/ int InitMouse() /* 初始化mouse */ { union REGS r ; r.x.ax=0 ; int86(0x33,&r,&r); if(r.x.ax==0xffff) mouse_installed=TRUE ; else mouse_installed=FALSE ; return(r.x.bx); } int ShowMouse() /* 显示鼠标 */ { union REGS r ; if(mouse_installed==FALSE)return(-1); r.x.ax=0x0001 ; int86(0x33,&r,&r); return(0); } int GetMouseXY(int*x,int*y) /*读取鼠标位置 */ { union REGS r ; if(mouse_installed==FALSE)return(-1); r.x.ax=0x0003 ; int86(0x33,&r,&r); *x=r.x.cx ; *y=r.x.dx ; return(0); } int GetPressInfo(int button) /*读取按下信息*/ { union REGS r ; if(mouse_installed==FALSE)return(-1); r.x.ax=0x0005 ; r.x.bx=button ; int86(0x33,&r,&r); return(r.x.bx); } /* button=1时,返回左右键同时按下次数。 */ /* button=0时,返回左键按下次数。 */ int SetMouseXY(int x,int y) /*设置鼠标位置*/ { union REGS r ; if(mouse_installed==FALSE)return(-1); r.x.ax=0x0004 ; r.x.cx=x ; r.x.dx=y ; int86(0x33,&r,&r); return(0); } int HideMouse() /* 隐藏鼠标 */ { union REGS r ; if(mouse_installed==FALSE)return(-1); r.x.ax=0x0002 ; int86(0x33,&r,&r); return(0); } /*=============顶条==========*/ void Meun()

{ setfillstyle(SOLID_FILL,CYAN); bar3d(50,20,590,50,0,0); outtextxy(100, 35," (C) Knocker 2004.10.07. Test the edition . "); } /*=========预视=============*/

void ShowPane(int*mat,int matsize,int x,int y,int color) /*依次:印模指针、点阵大小、起始坐标(x,y)、颜色*/ { int i,j,k,n ; setcolor(LIGHTCYAN); setfillstyle(SOLID_FILL,WHITE); bar3d(x-20,y-20,x+45,y+45,0,0); n=(matsize-1)/8+1 ; for(j=0;j<matsize;j++) for(i=0;i<n;i++) for(k=0;k<8;k++) /*测试为1的位则显示*/ if(mat[j*n+i]&(0x80>>k))putpixel(x+i*8+k,y+j,color); }

void SavePane(int*mat,int paneX,int paneY,int m) /*字模指针,点的位置x,y, m=0则消点,m=1则置点*/ { int c=0x01 ; int i,j ; i=paneX/8 ; j=paneX%8 ; c<<=(7-j); if(m==1)*(mat+i+paneY*3)=(*(mat+i+paneY*3)|c); else *(mat+i+paneY*3)=(*(mat+i+paneY*3)^c); } void Stars(int stars) { while(stars--)putpixel(rand()%640,rand()%480,rand()%16); }

[此贴子已经被作者于2004-10-08 10:29:12编辑过]

搜索更多相关主题的帖子: 图标 工具 制作 
2004-10-08 00:45
chengstone
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
帖 子:562
专家分:226
注 册:2004-4-3
收藏
得分:0 
刚刚运行了一下 蛮不错的 knocker 蛮有创意的么

qq:69558139
2004-10-15 17:10
bigbigboy
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2007-5-4
收藏
得分:0 

已经过了这么多年,还是这么有用。
谢谢啦!

2007-06-05 10:59
快速回复:[原创]一个篆印图标制作的小工具
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023271 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved