• Easyx图片操作


    Easyx图片操作

    1. 图片保存(IMAGE)

    class IMAGE(int width = 0, int height = 0);
    
    • 1

    共有成员

    • getwidth():返回 IMAGE 对象的宽度,以像素为单位。
    • getheight():返回 IMAGE 对象的高度,以像素为单位。
    • operator =:实现 IMAGE 对象的直接赋值。该操作仅拷贝源图像的内容,不拷贝源图像的绘图环境。

    2. 图片加载(loadimage

    loadimage函数用于从文件中读取图像

    // 从图片文件获取图像(bmp/gif/jpg/png/tif/emf/wmf/ico)
    void loadimage(
    	IMAGE* pDstImg,			// 保存图像的 IMAGE 对象指针
    	LPCTSTR pImgFile,		// 图片文件名
    	int nWidth = 0,			// 图片的拉伸宽度
    	int nHeight = 0,		// 图片的拉伸高度
    	bool bResize = false	// 是否调整 IMAGE 的大小以适应图片
    );
    
    // 从资源文件获取图像(bmp/gif/jpg/png/tif/emf/wmf/ico)
    void loadimage(
    	IMAGE* pDstImg,			// 保存图像的 IMAGE 对象指针
    	LPCTSTR pResType,		// 资源类型
    	LPCTSTR pResName,		// 资源名称
    	int nWidth = 0,			// 图片的拉伸宽度
    	int nHeight = 0,		// 图片的拉伸高度
    	bool bResize = false	// 是否调整 IMAGE 的大小以适应图片
    );
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • pDstImg:保存图像的 IMAGE 对象指针。如果为 NULL,表示图片将读取至绘图窗口。
    • pImgFile:图片文件名。支持 bmp / gif / jpg / png / tif / emf / wmf / ico 格式的图片。gif 格式的图片仅加载第一帧;gif 与 png 均不支持透明。
    • nWidth:图片的拉伸宽度。加载图片后,会拉伸至该宽度。如果为 0,表示使用原图的宽度。
    • nHeight:图片的拉伸高度。加载图片后,会拉伸至该高度。如果为 0,表示使用原图的高度。
    • bResize:是否调整 IMAGE 的大小以适应图片。
    • pResType:图片资源类型。
    • pResName:图片资源名称。
    • 返回值:无

    备注

    如果创建 IMAGE 对象的时候没有指定宽高,可以通过 Resize 函数设置。

    对于没有设置宽高的 IMAGE 对象,执行 loadimage 会将其宽高设置为和读取的图片一样的尺寸。

    Resize函数

    // 这个函数用于调整指定绘图设备的尺寸。
    void Resize(
    	IMAGE* pImg,
    	int width,
    	int height
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • pImg:指定要调整尺寸的绘图设备。如果为 NULL,则表示默认绘图窗口。
    • width:指定绘图设备的宽度。
    • height:指定绘图设备的高度。
    • 返回值:无

    3. 图片显示(putimage)

    // 绘制图像
    void putimage(
    	int dstX,				// 绘制位置的 x 坐标
    	int dstY,				// 绘制位置的 y 坐标
    	IMAGE *pSrcImg,			// 要绘制的 IMAGE 对象指针
    	DWORD dwRop = SRCCOPY	// 三元光栅操作码
    );
    
    // 绘制图像(指定宽高和起始位置)
    void putimage(
    	int dstX,				// 绘制位置的 x 坐标
    	int dstY,				// 绘制位置的 y 坐标
    	int dstWidth,			// 绘制的宽度
    	int dstHeight,			// 绘制的高度
    	IMAGE *pSrcImg,			// 要绘制的 IMAGE 对象指针
    	int srcX,				// 绘制内容在 IMAGE 对象中的左上角 x 坐标
    	int srcY,				// 绘制内容在 IMAGE 对象中的左上角 y 坐标
    	DWORD dwRop = SRCCOPY	// 三元光栅操作码
    );
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 参数看函数原型的注释

    备注

    三元光栅操作码(即位操作模式),支持全部的 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. "当前填充颜色"是指通过 setfillcolor 设置的用于当前填充的颜色。
    3. 查看全部的三元光栅操作码请参考这里:三元光栅操作码

    4. 双缓冲绘图

    BeginBatchDraw

    这个函数用于开始批量绘图。执行后,任何绘图操作都将暂时不输出到绘图窗口上,直到执行 FlushBatchDraw 或 EndBatchDraw 才将之前的绘图输出。

    void BeginBatchDraw();
    
    • 1

    EndBatchDraw

    这个函数用于结束批量绘制,并执行未完成的绘制任务。

    // 结束批量绘制,并执行未完成的绘制任务
    void EndBatchDraw();
    
    // 结束批量绘制,并执行指定区域内未完成的绘制任务
    void EndBatchDraw(
    	int left,
    	int top,
    	int right,
    	int bottom
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • left:指定区域的左部 x 坐标。
    • top:指定区域的上部 y 坐标。
    • right:指定区域的右部 x 坐标。
    • bottom:指定区域的下部 y 坐标。
    • 返回值:无

    FlushBatchDraw

    这个函数用于执行未完成的绘制任务。

    // 执行未完成的绘制任务
    void FlushBatchDraw();
    
    // 执行指定区域内未完成的绘制任务
    void FlushBatchDraw(
    	int left,
    	int top,
    	int right,
    	int bottom
    ); 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • left:指定区域的左部 x 坐标。
    • top:指定区域的上部 y 坐标。
    • right:指定区域的右部 x 坐标。
    • bottom:指定区域的下部 y 坐标。
    • 返回值:无

    5. 实例

    #include 
    #include 
    
    int main(void) {
    	// 1. 初始化图形设备
    	initgraph(400, 400);
    	// 2. to do ......
    	IMAGE image;					// 定义存储图片的变量
    	loadimage(&image, L"bk.png");	// 加载图片
    	int y = -image.getheight() + 400;
    	while (true) {
    		cleardevice();				// 清屏
    		BeginBatchDraw();			// 开始批量绘图
    		putimage(0, y, &image);		// 显示图片
    		if (y >= -400) y = -image.getheight() + 400;
    		else y += 10;
    		Sleep(200);
    		EndBatchDraw();				// 结束批量绘图
    	}
    	_getch();
    
    	// 3. 关闭图形化设备,并释放资源
    	closegraph();
    	return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    手绘地图深度解析:类型、风格、功能、价值、制作流程、智慧导览
    易周金融分析 | 互联网系小贷平台密集增资;上半年银行理财子公司综合评价指数发布
    记一次 解决米家免洗扫地机 清洗盘水位过高问题
    食品接触材料中的玻璃制品需要做哪些检测认证?
    Eclipse配置tomcat
    pytorch基础学习(6)
    hwk4:C++ 运算符重载
    windows环境安装Oracle
    【保姆级】新机器部署Nginx
    使用paddleX体验
  • 原文地址:https://blog.csdn.net/my_20021004/article/details/127137303