#include<iostream> #include<easyx.h> #include<ctime> #include <windows.h> #pragma comment(lib ,"winmm.lib") #include<mmsystem.h> using namespace std; void drawImg_s(int x, int y, IMAGE* img); void background(); void back1(); void back2(); void music(); //创建窗口 void background() { //创建窗口 initgraph(600,900); cleardevice(); } //城堡 void back1() { //保存图片 IMAGE back1; //加载图片 loadimage(&back1, _T("back1.png"), 600,900); //绘制图片 putimage(0, 0, &back1); } //生日快乐 void back2() { //保存图片 IMAGE back2; //加载图片 loadimage(&back2, _T("back2.png"),438,176); //绘制图片 drawImg_s(95, 90, &back2); } //透明贴图函数 void drawImg_s(int x, int y, IMAGE* img) { DWORD* pwin = GetImageBuffer(); //获取窗口缓冲区指针 DWORD* pimg = GetImageBuffer(img); //获取图片缓冲区指针 int win_w = getwidth(); int win_h = getheight(); int img_w = img->getwidth(); int img_h = img->getheight(); //判断x,y坐标是否超出了窗口范围 int real_w = (x + img_w > win_w) ? win_w - x : img_w; //超出右边界 int real_h = (y + img_h > win_h) ? win_h - y : img_h; //超出下边界 if (x < 0) //超出左边界处理 { pimg += -x; //让指针向后偏移 real_w -= -x; x = 0; } if (y < 0) //超出上边界处理 { pimg += (img_w * -y); //让指针向后偏移 real_h -= -y; y = 0; } pwin += (win_w * y + x); for (int iy = 0; iy < real_h; iy++) { for (int ix = 0; ix < real_w; ix++) { UCHAR alpha = pimg[ix] >> 24; if (alpha > 200)//0表示完全透明 { pwin[ix] = pimg[ix]; } } //换到下一行 pwin += win_w; pimg += img_w; } } //播放声音函数 void music() { mciSendString("open 生日快乐.mp3", NULL, 0, NULL); mciSendString("play 生日快乐.mp3 repeat",NULL, 0, NULL); } //死循环 防止闪退 void whiles() { while (1) { } } int main() { background(); back1(); back2(); music(); whiles(); }
浅浅学了一下C++的easyx图形库
做了一个生日快乐的祝福
歌曲放不了,可以自己选。这是我挑选的两张图片。文字图片可以先在PS中进行抠图。
如果有需要,也可以用代码中的透明贴图函数来实现抠图
后续还要增加一些内容,不做展示
标签:img,int,win,代码,back2,back1,void,十九日,九月 From: https://www.cnblogs.com/youxiandechilun/p/17716084.html