EASYX图片操作

easyx学习网址
建议使用谷歌搜索引擎搜索相关的资料
eg1:图片显示到桌面

cpp 复制代码
#include <stdio.h>
#include <easyx.h>
#include <iostream>
#include <math.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#define PI 3.14

int main() {
    // 绘制图片
    initgraph(1200, 480);
    IMAGE img;
    // EASYX不支持透明图片,loading表示的是加载图片
    loadimage(&img, "F:/picture/background.jpg");
    // putimage的作用第一个参数表示X轴的位置,第二个参数表示Y轴的位置,第三个参数表示要绘制的对象指针
    putimage(0, 0, &img);
    IMAGE imgBear;
    /*
        加载&imgBear表示对象指针,第二个参数表示对象路径,
        第三个参数表示的是拉伸的高度,第四个参数表示拉伸的宽度,
        最后一个参数表示适应图片大小

    */
    loadimage(&imgBear, "F:/picture/bear.png", 100, 235,true);
    putimage(530, 180, &imgBear);



    getchar();
    closegraph();
    return 0;

}

eg2:使用 三元光栅操作解决图片透明问题

cpp 复制代码
#include <stdio.h>
#include <easyx.h>
#include <iostream>
#include <math.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#define PI 3.14

/*
   将绘制透明图片的代码绘制成函数
   第一个参数和第二个参数表示x和y的坐标
   第三个参数表示合体掩码的对象指针
   第四个参数表示image的对象指针
*/
void putTransparentImage(int x, int y, const IMAGE* mask, const IMAGE* img) {
    putimage(x, y, mask, SRCAND);
    putimage(x, y, img, SRCPAINT);
}
int main() {
    /*
       任何的颜色与黑色做或运算其结构任然是其颜色本身
       剪影图片与绿色背景进行与运算得到绿色背景
       绿色背景与剪影的黑背熊主体进行或运算的到熊的主体背景
    */
    initgraph(1200, 480);
    IMAGE imgBackground;
    loadimage(&imgBackground, "F:/picture/background.jpg");
    IMAGE imgMask;
    loadimage(&imgMask, "F:/picture/mask.jpg");
    IMAGE imgBear;
    loadimage(&imgBear, "F:/picture/bear.png");
    // 调用putimage函数将背景图片绘制到窗体上
    putimage(0, 0, &imgBackground);
    // 使用掩码与窗体中的图像进行与运算
    putimage(530, 180, &imgMask, SRCAND);
    // 将熊的本体与窗体中的函数进行或运算
    putimage(530, 180, &imgBear, SRCPAINT);

    getchar();
    closegraph();
    return 0;

}

使用光栅运输的效果如下所示
eg3:实现动画效果让图片跑起来

图片的存储路径


透明图片背景存储位置

相关代码如下所示

cpp 复制代码
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <easyx.h>
#include <iostream>
#include <math.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#define PI 3.14
// 宏定义
#define BEAR_FRAMES 11
// 函数封装,让熊和背景图片完美的结合到一起
void putTransparentImage(int x, int y, const IMAGE* mask, const IMAGE* img) {
    putimage(x, y, mask, SRCAND);
    putimage(x, y, img, SRCPAINT);
}

int main() {
    initgraph(1200, 480);
    setbkcolor(WHITE);
    cleardevice();

    IMAGE imgBackground;
    loadimage(&imgBackground, "F:/picture/background.jpg");
       
    // 创建一个image类型的数组指针并且里面包含11个数据
    IMAGE imgArrBearFrames[BEAR_FRAMES];
    // 使用for循环对该数组进行遍历  int num =  sizeof(imgArrBearFrames[BEAR_FRAMES]) / sizeof(imgArrBearFrames[0]);
       
    // 将图片加载到image对象当中
    for (int i = 0; i < BEAR_FRAMES; i++) {
        // 创建字符数组
        char strImgPath[100];
        // 将图片的路径保存到给字符数组当中strImgPath,占位符百分号d会被参数I替换
        sprintf(strImgPath, "F:/picture/beer/frames/bear%d.png", i);
        // sprintf函数用于组合变换的部分和不变的部分
        loadimage(&imgArrBearFrames[i], strImgPath);
    }
    
    // 使用同样的方式对掩码的图片进行加载
    IMAGE imgArrBearMarsks[BEAR_FRAMES];
    for (int i = 0; i < BEAR_FRAMES; i++) {
        // 创建字符数组存储图片
        char strImgPath[100];
        // 将图片的路径添加到字符数组中
        sprintf(strImgPath, "F:/picture/beer/masks/bearmask%d.png", i);
        // 第一个参数是保存图像的对象指针,第二个参数是图片的地址
        loadimage(&imgArrBearMarsks[i], strImgPath);
    }
    // 轮播一组图片实现熊在路上跑步的效果
    int frame = 0; // 图片数组的下标
    int x = -150; // 熊的x坐标
    
    // 批量绘图函数
    BeginBatchDraw();
    
    while (1) {
        cleardevice();
        // 绘制背景图片
        putimage(0, 0, &imgBackground);
        // 绘制熊的一帧透明图片
        putTransparentImage(x, 180, &imgArrBearMarsks[frame], &imgArrBearFrames[frame]);
        // 将缓存区中的图片绘制到屏幕上
        FlushBatchDraw();
        frame++;
        x += 10; // x = x + 10;
    
        if (frame >= 11) {
            frame = 0;
        }
        if (x >= 1200 + 150) {
            x = -150;
        }
        Sleep(50);
    }
    // 结束EndBatchDraw()函数,结束批量绘图
    EndBatchDraw();
     return 0;

}

实现熊从左边跑到右边并且无限循环

相关推荐
九章云极AladdinEdu6 分钟前
GPU与NPU异构计算任务划分算法研究:基于强化学习的Transformer负载均衡实践
java·开发语言·人工智能·深度学习·测试工具·负载均衡·transformer
好吃的肘子27 分钟前
MongoDB 应用实战
大数据·开发语言·数据库·算法·mongodb·全文检索
ghost14330 分钟前
C#学习第23天:面向对象设计模式
开发语言·学习·设计模式·c#
小白学大数据31 分钟前
Scrapy框架下地图爬虫的进度监控与优化策略
开发语言·爬虫·python·scrapy·数据分析
立秋678937 分钟前
用Python绘制梦幻星空
开发语言·python·pygame
明月看潮生1 小时前
青少年编程与数学 02-019 Rust 编程基础 16课题、包、单元包及模块
开发语言·青少年编程·rust·编程与数学
后青春期的诗go1 小时前
基于Rust语言的Rocket框架和Sqlx库开发WebAPI项目记录(二)
开发语言·后端·rust·rocket框架
小刘要努力呀!1 小时前
嵌入式开发学习(第二阶段 C语言基础)
c语言·学习·算法
草莓熊Lotso2 小时前
【C语言字符函数和字符串函数(一)】--字符分类函数,字符转换函数,strlen,strcpy,strcat函数的使用和模拟实现
c语言·开发语言·经验分享·笔记·其他
盛夏绽放2 小时前
Python字符串常用内置函数详解
服务器·开发语言·python