C语言基础(二)图形编程2

来源:互联网 发布:nginx 400 错误 编辑:程序博客网 时间:2024/04/28 10:45
#include<graphics.h>#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<time.h>int main(void){int a = 0, b = 0, c = 255;int n = -1;int change = 5;int t, x, y;char key;IMAGE start;//1.初始化界面大小initgraph(640, 480);//setbkcolor(BLUE);//cleardevice();loadimage(&start, L"./Image/LookFirst.jpg",640,480);putimage(0, 0, &start);//2.设置字体settextcolor(WHITE);setbkmode(TRANSPARENT);settextstyle(50, 50, L"黑体");outtextxy(120, 120, L"打字游戏");//3.判断有无键盘输入while (!kbhit())//无输入{settextcolor(RGB(a, b, c));settextstyle(25, 25, L"黑体");outtextxy(140, 360, L"请按任意键开始");//进行颜色变化a += change;if ( b == 0 ||b == 255)n = -n;if (n==1){b++;c--;}else{b--;c++;}if (a == 0 || a == 255)change = -change;Sleep(50);}//有输入,刷新背景loadimage(&start, L"./Image/1.jpg", 640, 480);putimage(0, 0, &start);while (1){int x1=0, y1=0, x2=0, y2=0;//矩形坐标LINESTYLE p;p.style = PS_SOLID;srand(time(NULL));t = rand() % 26 + 65;//随机生成26个大写字母x = rand() % 620;//横坐标随机生成settextcolor(BLACK);settextstyle(20, 10, L"TIMES NEW ROMAN");setbkmode(TRANSPARENT);setlinecolor(RED);for (y = 0; y < 480; y++){setlinestyle(&p);clearrectangle(x1,y1,x2,y2);putimage(0, 0, &start);x1 = x - 5;y1 = y-5;x2 = x + 25;y2 = y + 30;if (kbhit()){key = getch();if (key == t){cleardevice();break;}else if (key == 27)//按下Esc退出游戏{return 0;}}rectangle(x1, y1, x2, y2);outtextxy(x, y, t);Sleep(20);}clearrectangle(x1, y1, x2, y2);}closegraph();return 0;}

1.void loadimage(

IMAGE* pDstImg, //保存图像的IMAGE对象指针

LPCTSTR pImgFile, //图片文件名

int nWidth=0, //图片拉伸宽度

int nHeight=0, //图片拉伸高度

bool bResize=false) //是否调整IMAGE大小以适应图片

分为从图片文件获取图像和从资源文件获取图像(bmp/jpg/gif/emf/wmf/ico)

【当从资源文件获取图像时:参数pImgFile 换成 pResType(资源类型)pResName(资源名称)

 

2.putimage(

int dstX,              // 绘制位置的 x坐标

    int dstY,              // 绘制位置的 y坐标

    IMAGE *pSrcImg,        // 要绘制的 IMAGE对象指针

    DWORD dwRop = SRCCOPY  // 三元光栅操作码

);

三元光栅操作码(即位操作模式),支持全部的 256 种三元光栅操作码,常用的几种如下:

含义

DSTINVERT

绘制出的像素颜色 = NOT 屏幕颜色

MERGECOPY

绘制出的像素颜色 = 图像颜色 AND 当前填充颜色

MERGEPAINT

绘制出的像素颜色 = 屏幕颜色 OR (NOT 图像颜色)

NOTSRCCOPY

绘制出的像素颜色 = NOT 图像颜色

NOTSRCERASE

绘制出的像素颜色 = NOT (屏幕颜色 OR 图像颜色)

PATCOPY

绘制出的像素颜色 = 当前填充颜色

PATINVERT

绘制出的像素颜色 = 屏幕颜色 XOR 当前填充颜色

PATPAINT

绘制出的像素颜色 = 屏幕颜色 OR ((NOT 图像颜色) OR 当前填充颜色)

SRCAND

绘制出的像素颜色 = 屏幕颜色 AND 图像颜色

SRCCOPY

绘制出的像素颜色 = 图像颜色

SRCERASE

绘制出的像素颜色 = (NOT 屏幕颜色) AND 图像颜色

SRCINVERT

绘制出的像素颜色 = 屏幕颜色 XOR 图像颜色

SRCPAINT

绘制出的像素颜色 = 屏幕颜色 OR 图像颜色

注:
(1) AND / OR / NOT / XOR 为布尔运算。
(2) "屏幕颜色"指绘制所经过的屏幕像素点的颜色。
(3) "图像颜色"是指通过 IMAGE 对象中的图像的颜色。
(4) "当前填充颜色"是指通过 setfillcolor 设置的用于当前填充的颜色。

3.void setbkmode(int mode); 设置图案填充和文字输出时的背景模式

mode指定图案填充和文字输出时的背景模式,可以是以下值: 

描述

OPAQUE

背景用当前背景色填充(默认)。

TRANSPARENT

背景是透明的。

 

4.void setlinecolor(COLORREF color); 设置当前画线颜色

5.void setlinestyle(

    int style,

    int thickness = 1,

    const DWORD *puserstyle = NULL,

    DWORD userstylecount = 0

);

参数可以用LINESTYLE * pstyle 指针代替

style:画线样式,由直线样式、端点样式、连接样式三类组成。可以是其中一类或多类的组合。同一类型中只能指定一个样式。

直线样式可以是以下值:

含义

PS_SOLID

线形为实线。

PS_DASH

线形为:------------

PS_DOT

线形为:············

PS_DASHDOT

线形为:-·-·-·-·-·-·

PS_DASHDOTDOT

线形为:-··-··-··-··

PS_NULL

线形为不可见。

PS_USERSTYLE

线形样式为用户自定义,有参数 puserstyle 和 userstylecount 指定。

PS_STYLE_MASK 是直线样式的掩码,可以通过该宏从画线样式中分离出直线样式。

端点样式可以是以下值:

含义

PS_ENDCAP_ROUND

端点为圆形。

PS_ENDCAP_SQUARE

端点为方形。

PS_ENDCAP_FLAT

端点为平坦。

PS_ENDCAP_MASK 是端点样式的掩码,可以通过该宏从画线样式中分离出端点样式。

连接样式可以是以下值:

含义

PS_JOIN_BEVEL

连接处为斜面。

PS_JOIN_MITER

连接处为斜接。

PS_JOIN_ROUND

连接处为圆弧。

PS_JOIN_MASK 是连接样式的掩码,可以通过该宏从画线样式中分离出连接样式。

Thickness:线的宽度,以像素为单位。

puserstyle:用户自定义样式数组,仅当线型为 PS_USERSTYLE 时该参数有效。

数组第一个元素指定画线的长度,第二个元素指定空白的长度,第三个元素指定画线的长度,第四个元素指定空白的长度,以此类推。

userstylecount:用户自定义样式数组的元素数量。

 

示例:

 

以下局部代码设置画线样式为点划线:

setlinestyle(PS_DASHDOT);

 

以下局部代码设置画线样式为宽度 3 像素的虚线,端点为平坦的:

setlinestyle(PS_DASH | PS_ENDCAP_FLAT, 3);

 

以下局部代码设置画线样式为宽度 10 像素的实线,连接处为斜面:

setlinestyle(PS_SOLID | PS_JOIN_BEVEL, 10);

 

以下局部代码设置画线样式为自定义样式(画 5 个像素,跳过 2 个像素,画3 个像素,跳过1 个像素……),端点为平坦的:

DWORD a[4] = {5, 2, 3, 1};

setlinestyle(PS_USERSTYLE | PS_ENDCAP_FLAT, 1, a, 4);

 

6.void rectangle(

    int left, //矩形左部 x坐标

    int top, //矩形上部 y坐标

    int right, //矩形右部 x坐标

    int bottom //矩形下部 y坐标

);


图形库拥有很多函数,基本上最常用的就是这几个,要想用好图形库关键还是要通过做项目来学习,这一块就先掌握到这里吧,毕竟还有很多其他东西要学,有时间再做更多的实践

0 0
原创粉丝点击