SimpleCG图像操作基础

        上一篇我们介绍了程序的交互功能,就可以编写一些简单的游戏了,例如贪吃蛇、扫雷、俄罗斯方块、五子棋等,都可以使用图形函数直接绘制,在后续文章中将逐一展示。不过编写画面丰富游戏离不开图像,所以本篇我们介绍一下基本的图像操作。

一、图像装载及释放

SimpleCG中图片使用结构SCG_Image保存,一般不需要了解SCG_Image内部结构,只需记住用该数据关联了图片。并通过该结构进行图片操作即可,相当于一个编号使用。所以装载图片使用如下代码

SCG_Image imgGet=image_load( _T("G:\\images\\demo.gif"));

该示例装载了g盘images目录下的demo.gif图片,保存在imgGet变量中,后续可通过该变量将图片显示出来。

需要注意的是所有装载及创建的图片使用完都需要使用

image_release(&imgGet);

进行内存释放,否则将导致内存泄露。使用的是图片变量的指针(&imgGet)进行调用。

二、图片显示

函数声明


//绘画图片到当前设备坐标(nX,nY)
void image_draw( SCG_Image* pSrcImg, int nXDst, int nYDst );void image_drawEx( SCG_Image* pSrcImg, int nXDst, int nYDst, int nXSrc, int nYSrc, int nSrcWidth, int nSrcHeight );void image_drawZoom( SCG_Image* pSrcImg, int nXDst, int nYDst, int nDstWidth, int nDstHeight );void image_drawZoomEx( SCG_Image* pSrcImg, int nXDst, int nYDst, int nDstWidth, int nDstHeight, int nXSrc, int nYSrc, int nSrcWidth, int nSrcHeight );

1、直接显示整幅图到指定位置

所以需要显示上面装载的图片到窗口(0,0)位置,可使用如下代码

//在坐标10,20处绘制图片
image_draw( &imgGet, 0,0);

 效果如图

2、如果只显示部分图片

可使用image_drawEx,传入要显示的图片的起始位置及大小,以及要绘制的目标坐标。例如小熊在图片的位置在从左上角(300,200)位置开始,长度宽度为(400,400)范围,我们把它显示在窗口坐标(20,20)位置,可按如下调用

SCG_Image imgGet=image_load( _T("xiong.png"));
image_drawEx( &imgGet, 20,20, 300,200,400,400 );
image_release(&imgGet);

显示效果如图

 3、缩放显示整幅图使用image_drawZoom

例如我们有一张多拉a梦的透明背景图(180x180),需要放大一倍显示在上面图片的小熊旁边

    SCG_Image imgGet=image_load( _T("xiong.png"));SCG_Image imgduola=image_load( _T("duola.png"));image_draw( &imgGet, 0,0);image_drawZoom( &imgduola, 150,200,360,360 );image_release(&imgGet);image_release(&imgduola);

 效果如图显示

 4、随意缩放图片任何部分到任意位置,使用image_drawZoomEx

例如我们要把树枝从一棵树图片上砍下,给多拉a梦一把树枝拿在手上,可用如下代码

    SCG_Image imgGet=image_load( _T("xiong.png"));SCG_Image imgduola=image_load( _T("duola.png"));SCG_Image imgtree=image_load( _T("tree.png"));image_draw( &imgGet, 0,0);image_drawZoom( &imgduola, 150,200,360,360 );image_drawZoomEx( &imgtree, 140,300,100,100, 0, 0, 50, 50 );image_release(&imgGet);image_release(&imgduola);image_release(&imgtree);

效果如图

以上就是图片显示相关函数。我们可以看到绘制函数直接支持图片透明通道,所以需要透明合成图片时,可用直接使用png透明图片即可。所以暂时SimpleCG不提供额外操作透明显示及合成的高级函数。

三、图片长宽参数获取


//获取图片宽度
UINT image_getwidth( SCG_Image* pDstImg );
//获取图片高度
UINT image_getheight( SCG_Image* pDstImg );

这两个函数可获取指定图片大小,进而进行相关操作,例如缩放等。 

四、结语

        以上就是图片的基本操作,对于其他更多的图片操作,例如多帧gif图片操作,图片保存,创建空图片,截取窗口图片等可以查看后续文章,或者自学能力强的同学可查看库文件说明。

 

库安装方法如下

SimpleCG库安装使用_b2b160的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/109700.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能合同和TikTok:揭示加密技术的前景

在当今数字化时代,智能合同和加密技术都成为了技术和商业世界中的热门话题。它们代表了一个崭新的未来,有着潜在的巨大影响。 然而,你或许从未想过将这两者联系在一起,直到今天。本文将探讨智能合同和TikTok之间的联系&#xff0…

联想G50笔记本直接使用F键功能(F1~F12)需要在BIOS设置关闭热键功能可以这样操作!

如果开启启用热键模式按F1就会出现FnF1的效果,不喜欢此方式按键的用户可以进入BIOS设置界面停用热键模式即可。 停用热键模式方法如下: 1、重新启动笔记本电脑,当笔记本电脑屏幕出现Lenovo标识的时候,立即按FnF2进入BIOS设置界面…

表单规定输入域的选项列表(html5新元素)

datalist datalist 元素规定输入域的选项列表。 datalist属性规定 form 或 input 域应该拥有自动完成功能。当用户在自动完成域中开始输入时,浏览器应该在该域中显示填写的选项: 使用 input元素的列表属性与datalist元素绑定. 还有一定的搜索能力&…

CVE-2020-9483 apache skywalking SQL注入漏洞

漏洞概述 当使用H2 / MySQL / TiDB作为Apache SkyWalking存储时,通过GraphQL协议查询元数据时,存在SQL注入漏洞,该漏洞允许访问未指定的数据。 Apache SkyWalking 6.0.0到6.6.0、7.0.0 H2 / MySQL / TiDB存储实现不使用适当的方法来设置SQL参…

GPIO基本原理

名词解释 高低电平:GPIO引脚电平范围:0V~3.3V(部分引脚可容忍5V)数据0就是0V,代表低电平;数据1就是3.3V,代表高电平; STM32是32位的单片机,所以内部寄存器也都是32位的…

用于细胞定位的指数距离变换图--Exponential Distance Transform Maps for Cell Localization

论文:Exponential Distance Transform Maps for Cell Localization Paper Link: Exponential Distance Transform Maps for Cell Localization Code(有EDT Map的生成方式): https://github.com/Boli-trainee/MHFAN 核…

网络编程 - TCP协议

一,TCP基本概念 TCP的特性: TCP是有连接的:TCP想要通信,就需要先建立连接,之后才能通信 TCP是可靠传输:网络上进行通信,A给B发消息,这个消息是不可能做到100%送达的,所以…

树模型(三)决策树

决策树是什么?决策树(decision tree)是一种基本的分类与回归方法。 长方形代表判断模块 (decision block),椭圆形成代表终止模块(terminating block),表示已经得出结论,可以终止运行。从判断模块引出的左右箭头称作为分支(branch)…

【AI视野·今日CV 计算机视觉论文速览 第268期】Mon, 16 Oct 2023

AI视野今日CS.CV 计算机视觉论文速览 Mon, 16 Oct 2023 Totally 61 papers 👉上期速览✈更多精彩请移步主页 Daily Computer Vision Papers Vision-by-Language for Training-Free Compositional Image Retrieval Authors Shyamgopal Karthik, Karsten Roth, Massi…

ESP RainMaker 客户案例 #2|PitPat

PitPat 是美国领先的健身品牌,致力于通过游戏化的方式改变人们的锻炼习惯,增强健康。该品牌通过智能设备和相关的移动应用程序为从事家庭锻炼的个人提供虚拟跑步体验。目前,PitPat 针对不同受众群体,开发了Superun,Dee…

从入门到进阶 之 ElasticSearch 文档、分词器 进阶篇

🌹 以上分享 ElasticSearch 文档、分词器 进阶篇,如有问题请指教写。🌹🌹 如你对技术也感兴趣,欢迎交流。🌹🌹🌹 如有需要,请👍点赞💖收藏&#…

【Electron】Not allowed to load local resource

问题描述 使用 audio 标签播放音频文件,控制台报错 Not allowed to load local resource。 原因分析 通常是安全策略所引起的。Electron 默认情况下禁止加载本地资源,以防止潜在的安全风险。 解决方案 在 main.js 中找到创建 BrowserWindow 实例的代码…

latex:使用中文字体

解决方案 我这里使用的是gbsn(其他的字体我不知道,如果有补充请评价),详细说明如下:

Python学习基础笔记七十二——IDE集成开发环境

集成开发环境,英文缩写是IDE。 IDE可以帮你更高效地开发项目代码。因为它提供了非常实用的功能,比如项目文件管理、语法高亮、代码导航、自动补齐代码、语法静态检查、调试、版本控制等等。 两款IDE:Pycharm和VSCode。 pycharm中的代码文件都…

万界星空科技/生产制造执行MES系统/开源MES/免费MES

开源系统概述: 万界星空科技免费MES、开源MES、商业开源MES、市面上最好的开源MES、MES源代码、免费MES、免费智能制造系统、免费排产系统、免费排班系统、免费质检系统、免费生产计划系统、免费数字化大屏。 万界星空开源MES制造执行系统的Java开源版本。开源mes…

Qtday2

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {//窗口设置ui->setupUi(this);this->setWindowTitle("原神");this->setWindowIcon(QIcon(":/picture/genshi…

在数组中合并相同id数据,并且数据中某一字段不一致也统一合并进去

封装的合并的函数 function formateArray(data:any){// ts-ignorelet res data.reduce((ac,a) > {// ts-ignorelet index ac.findIndex(x > x.id a.id);index -1 ? ac.push({...a}) : ac[index] {...ac[index],...a};return ac;},[])return res;}使用 allData 原始…

【jmeter】接口测试流程

1、Jmeter简介 Jmeter是由Apache公司开发的一个纯Java的开源项目,即可以用于做接口测试也可以用于做性能测试。 Jmeter具备高移植性,可以实现跨平台运行。 Jmeter可以实现分布式负载。 Jmeter采用多线程,允许通过多个线程并发取样或通过独…

Cron表达式每隔两小时执行一次

Cron表达式每隔两小时执行一次 0 0 */2 * * ?验证正确性

算法刷题总结(全)

刷题总结 by lds 2023-9-5 文章目录 1.数组/字符串1.1 合并两个有序数组【easy】1.2 移除元素【easy】1.3 删除有序数组中的重复项【easy】1.4 删除有序数组中的重复项II【mid】1.5 多数元素【easy】1.6 大数相加---【美团面试手撕题目】1.7 轮转数组【mid】1.8 买卖股票的最佳…