⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 图形处理.01

📁 经典C教程,带所有ANSI C的库函数说明及例子
💻 01
📖 第 1 页 / 共 4 页
字号:
	   };
    注明:
    1. 窗口颜色的设置与前面讲过的屏幕颜色设置相同,但屏幕背
       景色和窗口背景色只能是一种颜色,如果窗口背景色改变,
       整个屏幕的背景色也将改变这与文本窗口不同。
    2. 可以在同一个屏幕上设置多个窗口,但只能有一个现行窗口
       工作,要对其它窗口操作,通过将定义那个窗口的
       setviewport()函数再用一次即可。
    3. 前面讲过图形屏幕操作的函数均适合于对窗口的操作。    二、屏幕操作
    除了清屏函数以外,关于屏幕操作还有以下函数:    void far setactivepage(int pagenum);    void far setvisualpage(int pagenum);
    这两个函数只用于EGA,VGA 以及HERCULES图形适配器。
setctivepage()函数是为图形输出选择激活页。所谓激活页是指后续
图形的输出被写到函数选定的pagenum页面,该页面并不一定可见。
setvisualpage()函数才使pagenum所指定的页面变成可见页。页面从
0开始(Turbo C默认页)。如果先用setactivepage() 函数在不同页面
上画出一幅幅图像,再用setvisualpage() 函数交替显示,就可以实
现一些动画的效果。    void far getimage(int xl,int yl, int x2,int y2,
		      void far *mapbuf);    void far putimge(int x,int,y,void * mapbuf, int op);    unsined far imagesize(int xl,int yl,int x2,int y2);
    这三个函数用于将屏幕上的图像复制到内存,然后再将内存中的
图像送回到屏幕上。首先通过函数imagesize() 测试要保存左上角为
(xl,yl),右上角为(x2,y2)的图形屏幕区域内的全部内容需多少个字
节,然后再给mapbuf分配一个所测数字节内存空间的指针。通过调用
getimage()函数就可将该区域内的图像保存在内存中,需要时可用
putimage()函数将该图像输出到左上角为点(x, y)的位置上,其中
getimage()函数中的参数op规定如何释放内存中图像。    关于这个参数的定义参见下表。
		putimage()函数中的op值
━━━━━━━━━━━━━━━━━━━━━━━━━━
符号常数       数值      含   义
──────────────────────────
COPY_PUT         0       复制
XOR_PUT          1       与屏幕图像异或的复制
OR_PUT           2       与屏幕图像或后复制
AND_PUT          3       与屏幕图像与后复制
NOT_PUT          4       复制反像的图形
━━━━━━━━━━━━━━━━━━━━━━━━━━    对于imagesize()函数,只能返回字节数小于64K字节的图像区域,
否则将会出错,出错时返回-1。
    本节介绍的函数在图像动画处理、菜单设计技巧中非常有用。
    下面程序模拟两个小球动态碰撞过程。#include<malloc.h>
#include<stdio.h>
#include<graphics.h>
int main()
{
  int i, gdriver, gmode, size;
  void *buf;
  gdriver=DETECT;
  initgraph(&gdriver, &gmode, "c:\\caic\\bgi");
  setbkcolor(BLUE);
  cleardevice();
  setcolor(LIGHTRED);
  setlinestyle(0,0,1);
  setfillstyle(1, 10);
  circle(100, 200, 30);
  floodfill(100, 200, 12);
  size=imagesize(69, 169, 131, 231);
  buf=malloc(size);
  if(!buf) return -1;
  getimage(69, 169, 131, 231,buf);
  putimage(500, 269, buf, COPY_PUT);
  for(i=0; i<185; i++){
      putimage(70+i, 170, buf, COPY_PUT);
      putimage(500-i, 170, buf, COPY_PUT);
     }
  for(i=0;i<185; i++){
      putimage(255-i, 170, buf, COPY_PUT);
      putimage(315+i, 170, buf, COPY_PUT);
     }
  getch();
  closegraph();
 }
图形模式下的文本输出
    在图形模式下,只能用标准输出函数,如printf(),puts(),
putchar()函数输出文本到屏幕。除此之外,其它输出函数(如窗口输
出函数)不能使用,即是可以输出的标准函数,也只以前景色为白色,
按80列,25行的文本方式输出。
    Turbo C2.0也提供了一些专门用于在图形显示模式下的文本输出
函数。下面将分别进行介绍。    一、文本输出函数    void far outtext(char far *textstring);    该函数输出字符串指针textstring所指的文本在现行位置。    void far outtextxy(int x, int y, char far *textstring);
    该函数输出字符串指针textstring所指的文本在规定的(x, y)位
置。其中x和y为象元坐标。
    说明:
    这两个函数都是输出字符串,但经常会遇到输出数值或其它类型
的数据,此时就必须使用格式化输出函数sprintf()。
    sprintf()函数的调用格式为:    int sprintf(char *str, char *format, variable-list);    它与printf()函数不同之处是将按格式化规定的内容写入str 指
向的字符串中,返回值等于写入的字符个数。
    例如:'C110F1
    sprintf(s, "your TOEFL score is %d", mark);
    这里s应是字符串指针或数组,mark为整型变量。
    二、有关文本字体、字型和输出方式的设置
    有关图形方式下的文本输出函数,可以通过setcolor()函数设置
输出文本的颜色。另外,也可以改变文本字体大小以及选择是水平方
向输出还是垂直方向输出。    void far settexjustify(int horiz, int vert);    该函数用于定位输出字符串。
    对使用outtextxy(int x, int y, char far *str textstring)
函数所输出的字符串,其中哪个点对应于定位坐标(x,y)在TurboC2.0
中是有规定的。如果把一个字符串看成一个长方形的图形,在水平方
向显示时,字符串长方形按垂直方向可分为顶部,中部和底部三个位
置,水平方向可分为左,中,右三个位置,两者结合就有9个位置。
    settextjustify()函数的第一个参数horiz 指出水平方向三个位
置中的一个,第二个参数vert指出垂直方向三个位置中的一个,二者
就确定了其中一个位置。当规定了这个位置后,用outtextxy() 函数
输出字符串时, 字符串长方形的这个规定位置就对准函数中的(x,y)
位置。而对用outtext()函数输出字符串时,这个规定的位置就位于
现行游标的位置。有关参数horiz和vert的取值参见下表。
	       参数horiz和vert的取值
━━━━━━━━━━━━━━━━━━━━━━━━
   符号常数          数值           用于
────────────────────────
 LEFT_TEXT             0            水平
 RIGHT_TEXT            2            水平
 BOTTOM_TEXT           0            垂直
 TOP_TEXT              2            垂直
 CENTER_TEXT           1            水平或垂直
━━━━━━━━━━━━━━━━━━━━━━━━
    void far settextstyle(int font, int direction,
			  int charsize);    该函数用来设置输出字符的字形(由font确定)、输出方向(由
direction确定)和字符大小(由charsize确定)等特性。Turbo C2.0对
函数中各个参数的规定见下列各表所示:
		font的取值
━━━━━━━━━━━━━━━━━━━━━━━━
符号常数         数值      含义
────────────────────────
DEFAULT_FONT         0       8*8点阵字(缺省值)
TRIPLEX_FONT         1       三倍笔划字体
SMALL_FONT           2       小号笔划字体
SANSSERIF_FONT       3       无衬线笔划字体
GOTHIC_FONT          4       黑体笔划字
━━━━━━━━━━━━━━━━━━━━━━━━
		direction的取值
━━━━━━━━━━━━━━━━━━━━━━━━
符号常数          数值        含义
────────────────────────
HORIZ_DIR           0         从左到右
VERT_DIR            1         从底到顶
━━━━━━━━━━━━━━━━━━━━━━━━
		charsize的取值
━━━━━━━━━━━━━━━━━━━━━━━━
符号常数或数值              含义
────────────────────────
     1                      8*8点阵
     2                    16*16点阵
     3                    24*24点阵
     4                    32*32点阵
     5                    40*40点阵
     6                    48*48点阵
     7                    56*56点阵
     8                    64*64点阵
     9                    72*72点阵
    10                    80*80点阵
USER_CHAR_SIZE=0       用户定义的字符大小
━━━━━━━━━━━━━━━━━━━━━━━━
    有关图形屏幕下文本输出和字体字型设置函数的用法请看下例:#include<graphics.h>
#include<stdio.h>
int main()
{
  int i, gdriver, gmode;
  char s[30];
  gdriver=DETECT;
  initgraph(&gdriver, &gmode, "c:\\caic\\bgi");
  setbkcolor(BLUE);
  cleardevice();
  setviewport(100, 100, 540, 380, 1);
			   /*定义一个图形窗口*/
  setfillstyle(1, 2);      /*绿色以实填充*/
  setcolor(YELLOW);
  rectangle(0, 0, 439, 279);
  floodfill(50, 50, 14);
  setcolor(12);
  settextstyle(1, 0, 8);
		  /*三重笔划字体, 水平放大8倍*/
  outtextxy(20, 20, "Good Better");
  setcolor(15);
  settextstyle(3, 0, 5);
		  /*无衬笔划字体, 水平放大5倍*/
  outtextxy(120, 120, "Good Better");
  setcolor(14);
  settextstyle(2, 0, 8);
  i=620;
  sprintf(s, "Your score is %d", i);
		  /*将数字转化为字符串*/
  outtextxy(30, 200, s);
		  /*指定位置输出字符串*/
  setcolor(1);
  settextstyle(4, 0, 3);
  outtextxy(70, 240, s);
  getch();
  closegraph();
  return 0;
 }
    三、用户对文本字符大小的设置
    前面介绍的settextstyle()函数,可以设定图形方式下输出文本
字符这字体和大小但对于笔划型字体(除8*8点阵字以个的字体), 只
能在水平和垂直方向以相同的放大倍数放大。为此Turbo C2.0又提供
了另外一个setusercharsize() 函数,对笔划字体可以分别设置水平
和垂直方向的放大倍数。该函数的调用格式为:    void far setusercharsize(int mulx, int divx,
			     int muly, int divy);    该函数用来设置笔划型字和放大系数,它只有在settextstyle()
函数中的charsize为0(或USER_CHAR_SIZE)时才起作用,并且字体为
函数settextstyle()规定的字体。调用函数setusercharsize()后,
每个显示在屏幕上的字符都以其缺省大小乘以mulx/divx为输出字符
宽,乘以muly/divy为输出字符高。该函数的用法见下例。#include<stdio.h>
#include<graphics.h>
int main()
{
  int gdriver, gmode;
  gdriver=DETECT;
  initgraph(&gdriver, &gmode, "c:\\caic\\bgi");
  setbkcolor(BLUE);
  cleardevice();
  setfillstyle(1, 2); /*设置填充方式*/
  setcolor(WHITE);    /*设置白色作图*/
  rectangle(100, 100, 330, 380);
  floodfill(50, 50, 14);      /*填充方框以外的区域*/
  setcolor(12);                     /*作图色为淡红*/
  settextstyle(1, 0, 8);   /*三重笔划字体,放大8倍*/
  outtextxy(120, 120, "Very Good");
  setusercharsize(2, 1, 4, 1);
			/*水平放大2倍,垂直放大4倍*/
  setcolor(15);
  settextstyle(3, 0, 5);
			/*无衬字笔划,放大5倍*/
  outtextxy(220, 220, "Very Good");
  setusercharsize(4, 1, 1, 1);
  settextstyle(3, 0, 0);
  outtextxy(180, 320, "Good");
  getch();
  closegraph();
  return 0;
 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -