“前像素”指针指向该坐标点作为“偏右图”上的一点,在“偏左图”所对应的点的坐标。“后像素”指针指向该坐标点作为“偏左图”上的一点,在“偏右图”所对应的点的坐标。程序中,“立体形体水平剖面的高低坐标数据”、“原始图案素材”和输出的“立体画”的文件格式都是采用了Windows3.1 的Pbrush产生的BMP图形文件格式。图幅大小要求都是640×400,用16种颜色方式。其中,立体形体上各点的高低坐标用图形文件中的颜色值表示,因此该图形文件的图形与带颜色的等高线图安全相同。通常情况下,在16色的BMP文件中颜色值从小到大的顺序为:黑色、暗红色、暗绿色、暗黄色、暗蓝色、暗紫色、暗青色、暗灰色、灰色、明红色、明绿色、明黄色、明蓝色、明紫色、明青色、白色。本程序采用最简单的“图案充填”方案,即各条“链”上的像素点皆采用该“链”上的第一个像素的颜色。程序中的常数EYE-SPACE表示“偏左图”和“偏右图”之间的偏差,BO-DOT是表明“链”的首或尾的指针标志。 该程序寄生在Windows 3.1中的Pbrush软件上。借助于它来构筑立体形体(即立体形体水平剖面高低坐标数据文件图8),设计原始图案(图9)。程序运行后,逐行输入并处理以上两个文件中的图形,然后输出立体画结果文件(图10)。最后,用Pbrush来观赏立体画result.bmp。当然,要设计出令人赏心悦目的立体画,必须在立体形体和图案素材的选择和搭配上做到天衣无缝,独具匠心。 @@09A04007.GIF;图8@@ @@09A04008.GIF;图9@@ @@09A04009.GIF;图10程序清单@@ /*--from 1995.4.19--to 1995.5.18----*/include<stdio.h> #define COMPRESSION 0 #define SIZE-OF-BITMAPFILEHEADER 14 #define SIZE-OF-BITMAPINFOHEADER 40 #define SIZE-OF-RGBQUAD 4 #define PIXEL-DATE-OFFSET 14+40+4*16 /*SIZE-OF-BITMAPFILEHEADER+SIZE-OF-BITMAPINFOHEADER+BITS-PER-PIXEL *NUM-COLOR*/ #define NUM-COLOR 16 #define NUM-LINE 400 #define WIDTH 640 #define BITS-PER-PIXEL 4 #define PIXEL-PER-BYTE 2 /*8/BITS-PER-PIXEL*/ #define BYTE-PER-LINE 320 /*((WIDTH*BITS-PER-PIXEL-1)/32+1)*4 */ #define NO-DOT WIDTH+1 #define EYE-SPACE 128 struct{ unsignde char color ; unsigned int pri-x ; unsigned int nxt-x ; }dot[WIDTH]; main() { struct tagBITMAPFILEHEADER{ unsigned char bfType1,bfType2; /* always equal to'BM'*/ unsigned long int bfSize; /*size of file */ unsigned int bfReserved1,bfReserved2; /* set to zero */ unsiged long int bfoffits; /*byte offset from BITMAPFILEHEADER to bitmap p ixel data in the file */ }BITMAPFILEHEADER; struct tagBITMAPINFOHEADER{ unsigned long int biSize,/* size of BITMAPINFOHEADER */ biWidth;/* width in pixels biHeight;/* height in pixels */ unsigned int biPlanes, /* always 1 */ biBitCount; /* color bits per pixel must be 1,4,8 or 24 */ unsigned long int biCompression, /*BI-RGB,BI-RLE 8 or 4*/ biSizeImage, /*total bytes in image */ biXPelsPerMeter,/* 0,or opt,h res. */ biYPelsPerMeter,/* 0,or opt,h res. */ biClrUsed, /* normally 0,can set a lower no. colors than biBitCount */ biClrImportant; /* normally 0 */ }BITMAPINFOHEADER; struct tagRGBQUAD{ unsigned char rgbBlue, /* blue intensity,0-255 */ rgbGreen, /* green intensity,0-255 */ rgbRed, /* red intensity,0-255 */ rgbReserved; /* reserved,set to Zero */ }RGBQUAD[NUM-COLOR]; char *fn-layer="layer.bmp"; char *fn-org="origin.bmp"; char *fn-result="result.bmp"; FILE *flayer,*fOrigin, *fResult; unsigned char tmp-byte1,tmp-byte2; unsigned int line,i-byte,i-pixel,x; unsigned int layer; int left-x,right-x;tmp-x; unsigned long int cur-offset; unsigned char h[WIDTH],org-color[WIDTH]; puts("---WINTRICK---"); puts("---by Li Jisong ---"); if( (fLayer=fopen(fn-layer,"rb") )!=NULL) { fread(&BITMAPFILEHEADER,SIZE-OF-BITMAPFILEHADER,1,fLayer); fread(&BITMAPINFOHEADER,SIZE-OF-BITMAPINFOHEADER,1,fLayer); if( BITMAPFILEHEADER.bfType1=='B' && BITMAPFILEHEADER.bfType2=='M' && BITMAPINFOHEADER.biWidth==WIDTH && BITMAPINFOHEADER.biHeight==NUM- LINE && BITMAPINFOHEADER.biBitCount==BITS-PER-PIXEL && BITMAPINFOHEADER.biCompression==COMPRESSION) fread(RGBQUAD,SIZE-OF-RGBQUAD,NUM-COLOR,fLayer); else{ fclose(fLayer); printf("File %s is not fit for this program!/n",fn-layer); getch(); exit(1); } } else{ printf("File %s does not exist!/n",fn-layer); getch(); exit(2); } if( (fOrigin=fopen(fn-org,"rb"))!=NULL) { fread(& BITMAPFILEHEADER,SIZE-OF-BITMAPFILEHEADER,1,fOrigin); fread(& BITMAPINFOHEADER,SIZE-OF-BITMAPINFOHEA 上一页 [1] [2] [3] 下一页
Tags:
|