SimpleCG图像操作基础

news2024/10/6 4:44:55

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

一、图像装载及释放

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.coloradmin.cn/o/1106156.html

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

相关文章

零信任身份管理平台,构建下一代网络安全体系

随着数字化时代的到来,网络安全已成为企业和组织面临的一项重要挑战。传统的网络安全方法已经无法满足不断演变的威胁和技术环境。近期,中国信息通信研究院(简称“中国信通院”)发布了《零信任发展研究报告( 2023 年&a…

全球领先的即时通讯厂家,为企业提供卓越沟通解决方案

不同部门的协同合作是企业内部高效运作的关键,然而,传统的沟通方式往往会受到时间、空间以及信息传递效率的限制,给企业带来不必要的困扰。随着科技的不断进步,解决这一问题的新利器应运而生——WorkPlus,一款基于即时…

链表增删操作问题及解决方法

目录 链表增加元素首部中间尾部 链表删除元素首部中间尾部 链表是一种常用的数据结构,用于存储和组织数据。在链表中,增加和删除元素是常见的操作。然而,在进行链表的增删操作时,对于首部、中间和尾部位置的元素,都存在…

UWB安全数据通讯STS-加密、身份认证

DW3000系列才能支持UWB安全数据通讯,DW1000不支持 IEEE 802.15.4a没有数据通讯安全保护机制,IEEE 802.15.4z中指定的扩展得到增强(在PHY/RF级别):增添了一个重要特性“扰频时间戳序列(STS)”&a…

mysql修改root用户的密码

mysql修改root用户的密码 方法1: 用SET PASSWORD命令方法2:用mysqladmin方法3:用UPDATE直接编辑user表方法4:在忘记root密码的时候,可以这样以windows为例: 连接mysql问题 mysql备份工具之mysqldump 方法1&…

反转链表(java)

大家好我是苏麟今天说一说链表常见的简单题目 . BM1 反转链表 牛客BM1 反转链表 : 描述 : 给定一个单链表的头结点(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。 分析 : …

AP5101C 高压线性恒流 LED电源驱动IC 3D打印机显示灯驱动器

1,产品描述 AP5101C 是一款高压线性 LED 恒流芯片 , 简单 、 内置功率管 , 适用于6- 100V 输入的高精度降压 LED 恒流驱动芯片。电流2.0A。AP5101C 可实现内置MOS 做 2.0A,外置 MOS 可做 3.0A 的。AP5101C 内置温度保护功能 ,温度…

3. 实战入门

3. 实战入门 文章目录 3. 实战入门3.1 Namespace3.1.1测试两个不同的名称空间之间的 Pod 是否连通性 3.2 Pod3.3 Label3.4 Deployment3.5 Service 本章节将介绍如何在kubernetes集群中部署一个nginx服务,并且能够对其进行访问。 3.1 Namespace Namespace是kubernet…

IDEA使用内置database数据库连接mysql报错:javax.net.ssl.SSLHandshakeException

参考一些博客的方式: 使用idea内置database连接数据库报错javax.net.ssl.SSLHandshakeException: No appropriate protocol_idea database ssl_你当像山的博客-CSDN博客 他们的方式是:在url后添加useSSLfalse 介绍另外一种方式: 点击datab…

大规模语言LLaVA:多模态GPT-4智能助手,融合语言与视觉,满足用户复杂需求

大规模语言LLaVA:多模态GPT-4智能助手,融合语言与视觉,满足用户复杂需求 一个面向多模式GPT-4级别能力构建的助手。它结合了自然语言处理和计算机视觉,为用户提供了强大的多模式交互和理解。LLaVA旨在更深入地理解和处理语言和视…

小程序setData动态传递key

有些时候可能需要根据key是个变量 比如 let keyName "name" this.setData({keyName :"张三" })本来想将keyName替换为name的,但是小程序只会在data中定义一个key为keyName ,value为“张三”的一条数据。 正确写法为: let keyNam…

SS626V100_SDK_V2.0.1.0 安装编译 osdrv 问题汇总

目录 前言1、开发环境2、在 linux 服务器上安装交叉工具链2.1 安装 aarch64-mix410-linux.tgz2.2 安装 cc-riscv32-cfg11-musl-20220523-elf.tar.gz2.3 检查工具链版本,打印版本则表示配置成功 3、安装 SDK3.1 SS626V100_SDK_V2.0.1.0 安装包位置3.2 解压缩并展开 S…

怎么把图片改成jpg格式?

怎么把图片改成jpg格式?大家都知道,随着计算机被发明到现在已经存在了很多年,在这么多的的技术发展过程中,也形成了种类非常多的图片文件格式,例如平时我们能接触到的图片格式有jpg、png、gif、bmp、heic、tiff、jfif、…

力扣-python-两数之和

题解: class Solution(object):def twoSum(self, nums, target):# 遍历列表for i in range(len(nums)):# 计算需要找到的下一个目标数字res target-nums[i]# 遍历剩下的元素,查找是否存在该数字if res in nums[i1:]:# 若存在,返回答案。这里…

云安全—云计算架构

0x00 前言 云中的所有的软件都是作为服务来提供的,需要支持多租户,需要提供伸缩的能力,所有需要特定的软件架构来进行支持。 0x01 云计算的本质 1.云计算系统工程 主要特点是: 弹性透明模块化通用动态多租赁 云计算通过对硬…

基于JavaWeb+SpringBoot+Vue健身俱乐部系统的设计和实现

基于JavaWebSpringBootVue健身俱乐部系统的设计和实现 源码传送入口前言主要技术系统设计功能截图Lun文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码传送入口 前言 1.1 课题背景 随着互联网的发展,电脑已成为人们生活中必不可少的生活办公工…

asyncawait函数

一种更简洁的方式写出基于Promise的异步行为 async函数的返回值为一个promise,通过then和catch来捕获内部的返回值 1.特性: 1. async函数内部会返回一个promise对象,如果看起来不是promise,那么它将会隐式的包装在promise中(如…

保姆级VitrualBox下载ubantu

首先先到此处下载VitrualBox选择对应的配置 Oracle VM VirtualBox 下载VitrualBox的同时要下载一个Visual,支持VitrualBox运行 最新受支持的 Visual C 可再发行程序包下载 | Microsoft Learn 同时再根据下面的网址去下载Ubantu 下载好后桌面出现这两个&#xff0c…

从培训班出来之后找工作的经历,教会了我五件事.....

我是非计算机专业,由于专业不好实习急着就业有过一些失败的工作经历后,跑去参加培训进入IT这行的。 之前在报名学习软件测试之前我也很纠结,不知道怎么选择机构。后面看到有同学在知乎上分享自己的学习经历,当时对我的帮助很大。…