SetWorkingImage :设置工作区
SetWorkingImage(&bigimg); SetWorkingImage(NULL);//回到默认工作区
如果需要对某个 IMAGE 做绘图操作,可以通过该函数将其设置为当前的绘图设备,之后所有的绘图语句都会绘制在该 IMAGE 上面。
简而言之,就是设置某一个特定的区域来进行绘图
比如下面的代码就把图片作为一个工作区
将参数置为 NULL 可恢复对默认绘图窗口的绘图操作。
比如下面的,添加工作区,可以把一张图片分割为多张图片
运行效果,可以发现图片变成分开的了
代码
/* 可以看看这个视频 【【C语言/C++】项目实战:烟花表白】 https://www.bilibili.com/video/BV1ZA411L7zx?p=2&vd_source=21581d752de8daca00ef38561a7264f6 */ #include<graphics.h> #include<easyx.h> #include<stdio.h> #include<time.h> #define NUM 13 struct Jet { int x, y;//烟花弹的坐标 当前的坐标 int hx, hy;//烟花弹最高的坐标 bool shoot;//烟花弹的状态(是否发射) unsigned long t1, t2, dt;//速度(单位时间dt=t2-t1) IMAGE img[2];//两张图片 img[0]-暗色图片 ing[1]-亮色图片 一闪一闪的效果 byte n : 1;//位段(可以用到CPU里面,n是一个变量 1个位 1/8个字节 n++对于0 1 0 1…… }jet[NUM]; //img[n++]一闪一闪的效果 void load() { srand(time(NULL)); IMAGE bigimg;//先加载一整张图片 loadimage(&bigimg, _T("1.jpg"), 200, 50); //工作区(就是能看到的窗口) SetWorkingImage(&bigimg); //分解一张图片为多张图片 for (int i = 0; i < NUM; i++) { int n = rand() % 5;//随机得到一个下标 getimage(&jet[i].img[0],n*20,0,20,50);// getimage(&jet[i].img[1],(n+5)*20,0,20,50); } SetWorkingImage(NULL);//回到默认工作区 } void init(int i)//初始化 { jet[i].x=0; jet[i].y=0; jet[i].hx=0; jet[i].hy=0; jet[i].t1=GetTickCount();//获取系统的时间 jet[i].t2=0; jet[i].dt=rand()%10+1;//1ms到10ms之间 jet[i].n=0; jet[i].shoot=false; IMAGE bigimg;//先加载一整张图片 loadimage(&bigimg, _T("1.jpg"), 200, 50); //jet[i].img[0]; //jet[i].img[1]; } //烟花弹出现的时间间隔 void choise(DWORD& tt1) { DWORD tt2 = GetTickCount(); if (tt2 - tt1 > 100) { int i = rand() % NUM;//0-12 if (jet[i].shoot == false) { //数据重新规划一下 jet[i].x = rand()%(1200-20); jet[i].y = rand()%(100+600);//600-699 jet[i].hx = jet[i].x; jet[i].hy = rand()%400;//0-399 jet[i].shoot = true; putimage(jet[i].x, jet[i].y, &jet[i].img[jet[i].n]);//只要n++,就会一闪一闪的 } tt1 = tt2; } } void Shoot() { for (int i = 0; i < NUM; i++) { jet[i].t2 = GetTickCount(); if (jet[i].t2 - jet[i].t1 > jet[i].dt && jet[i].shoot == true) { putimage(jet[i].x, jet[i].y, &jet[i].img[jet[i].n]);//只要n++,就会一闪一闪的 if(jet[i].y>jet[i].hy) { jet[i].n++; jet[i].y -= 5;//上升的效果 } putimage(jet[i].x, jet[i].y, &jet[i].img[jet[i].n]); if (jet[i].y <= jet[i].hy)//到达了最高的高度 { putimage(jet[i].x, jet[i].y, &jet[i].img[jet[i].n]); //它的使命完成 jet[i].shoot = false;//便于重复使用 } jet[i].t1 = jet[i].t2; } } } int main() { initgraph(1200, 800); DWORD tt1 = GetTickCount(); load(); putimage(100, 100, &jet[5].img[0]); putimage(150, 100, &jet[5].img[1]); for (int i = 0; i < NUM; i++) { init(i); } while (1) { choise(tt1); Shoot(); } getchar(); }
Code over!