go使用SDL例子

news/2025/1/7 5:12:49/文章来源:https://www.cnblogs.com/xiongwei/p/18619470
package mainimport ("fmt""io/ioutil""time""unsafe"sdl "github.com/moonfdd/sdl2-go/sdl2""github.com/moonfdd/sdl2-go/sdlcommon"
)const REFRESH_EVENT = sdl.SDL_USEREVENT + 1 // 请求画面刷新事件
const QUIT_EVENT = sdl.SDL_USEREVENT + 2    // 退出事件
// 定义分辨率
// YUV像素分辨率
const YUV_WIDTH = 320
const YUV_HEIGHT = 240// 定义YUV格式
const YUV_FORMAT = sdl.SDL_PIXELFORMAT_IYUVvar s_thread_exit = 0 // 退出标志 = 1则退出func main() {sdlcommon.SetSDL2Path("SDL2.0.16.dll")sdl.SDL_Init(sdl.SDL_INIT_VIDEO)pixformat := YUV_FORMAT// 分辨率// 1. YUV的分辨率video_width := int32(YUV_WIDTH)video_height := int32(YUV_HEIGHT)// 2.显示窗口的分辨率win_width := int32(YUV_WIDTH)win_height := int32(YUV_WIDTH)y_frame_len := video_width * video_heightu_frame_len := video_width * video_height / 4v_frame_len := video_width * video_height / 4yuv_frame_len := y_frame_len + u_frame_len + v_frame_lenwindow := sdl.SDL_CreateWindow("微信公众号:福大大架构师每日一题", sdl.SDL_WINDOWPOS_UNDEFINED, sdl.SDL_WINDOWPOS_UNDEFINED, video_width, video_height, sdl.SDL_WINDOW_OPENGL|sdl.SDL_WINDOW_RESIZABLE)if window == nil {fmt.Printf("Can't create window, err:%s", sdl.SDL_GetError())return}renderer := window.SDL_CreateRenderer(-1, 0)texture := renderer.SDL_CreateTexture(uint32(pixformat), sdl.SDL_TEXTUREACCESS_STREAMING, video_width, video_height)var event sdl.SDL_Eventvar rect sdl.SDL_RectfileData, err := ioutil.ReadFile("yuv420p_320x240.yuv")if err != nil {fmt.Println("读取文件失败", err)return}//创建请求刷新线程go func() {for s_thread_exit == 0 {var event sdl.SDL_Eventevent.Type = REFRESH_EVENTevent.SDL_PushEvent()time.Sleep(40 * time.Millisecond)}s_thread_exit = 0var event sdl.SDL_Eventevent.Type = QUIT_EVENTevent.SDL_PushEvent()}()for {// 收取SDL系统里面的事件event.SDL_WaitEvent()if event.Type == REFRESH_EVENT { // 画面刷新事件if len(fileData) < int(yuv_frame_len) {break}video_buf := fileData[0:yuv_frame_len]for i := y_frame_len; i < yuv_frame_len; i++ {video_buf[i] = 128 //彩色变黑白}fileData = fileData[yuv_frame_len:]// 设置纹理的数据 video_width = 320, planetexture.SDL_UpdateTexture(nil, uintptr(unsafe.Pointer(&video_buf[0])), video_width)// 显示区域,可以通过修改w和h进行缩放rect.X = 0rect.Y = 0//w_ratio := win_width * 1.0 / video_width//h_ratio := win_height * 1.0 / video_height//320x240 怎么保持原视频的宽高比例//rect.W = video_width * w_ratio//rect.H = video_height * h_ratiorect.W = win_widthrect.H = win_height// 清除当前显示renderer.SDL_RenderClear()// 将纹理的数据拷贝给渲染器renderer.SDL_RenderCopy(texture, nil, &rect)// 显示renderer.SDL_RenderPresent()} else if event.Type == sdl.SDL_WINDOWEVENT {window.SDL_GetWindowSize(&win_width, &win_height)} else if event.Type == sdl.SDL_QUIT {s_thread_exit = 1} else if event.Type == QUIT_EVENT {break}}texture.SDL_DestroyTexture()renderer.SDL_DestroyRenderer()window.SDL_DestroyWindow()sdl.SDL_Quit()
}

  

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

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

相关文章

Origin绘图教程 | 第一张绘图从这里开始

主要内容:生成数据+绘图图形+简单美化+保存项目 生成数据并绘图 1. 打开Origin。默认会打开一个空白的工作簿,其中包含一个两列的工作表。 2. 右键单击A列,在弹出菜单中选择填充列: 一组数字...(若菜单列表被折叠,你需要展开整个右键菜单来找到这个选项——可做如下设置关…

Go使用zap和lumberjack库,实现每小时间轮转日志文件

创建一个文件夹,命名为 loggerDemo 打开这个文件夹 打开终端,点击左下角 叉和感叹号 在弹出的窗口中点击 TERMINAL 进入终端(也可以使用快捷键 CTRL+` 直接打开)初始化 Go 的 Modulego mod init loggerDemo点击文件创建图标创建文件 创建一个名为 main.go 的文件 ,按下 …

Goby自定义编写EXP入门篇:编写模板基础使用讲解

众所周知,Goby可以利用便捷的Json图形化编写PoC/EXP,但由于Goby的PoC/EXP基于Go代码,所以很多新手同学可能不太理解其中的变量和代码逻辑,为此,我们将开展从入门到精通的系列教程,为大家详细讲解如何使用Goby的JSON图形化界面进行漏洞编写。 入门篇:Goby Poc模板架构讲解…

SOLIDWORKS快捷键命令大全

SOLIDWORKS是一款广泛应用于工程设计、产品开发及机械制造领域的三维计算机辅助设计(CAD)软件。它以其直观的用户界面、强大的设计功能,成为了深受专业设计师喜爱的设计工具。想要在SOLIDWORKS中以更高的效率绘图,掌握一些快捷键,会让你的设计工作更加得心应手! 我们一起…

让AI碰撞!“天翼云息壤杯”高校AI大赛江苏赛区交流会热力开场!

由中国电信集团有限公司主办,天翼云科技有限公司承办的“天翼云息壤杯”高校AI大赛正在火热进行中。为了提高江苏赛区学生的参赛热情,增强学生的创作能力,江苏电信、天翼云华东中心于12月6日在南京联合举办了主题为“共筑教育新生态,息壤智汇新征程”的AI大赛交流分享会。由…

Parquet存储概述及读写时效对比

1. Parquet简介 Parquet是一种开放的列式存储格式,旨在提高大数据处理和分析的效率。 Parquet由Twitter和Cloudera合作开发,并于2015年5月从Apache的孵化器项目毕业,成为Apache的顶级项目。 Parquet旨在高效存储和处理大规模数据集,广泛应用于Hadoop、Spark等大数据生态系统…

“息 壤” 升 级 !

12月3日,以“AI赋能 共筑数字新生态”为主题的2024数字科技生态大会在广州召开。主论坛上,中国电信集团有限公司总经理助理,天翼云科技有限公司董事长、总经理胡志强对“息壤”一体化智算平台的最新升级和应用进行了介绍。通过在算网调度、智算服务、智算生态三个方面的大规…

AI智能分析视频分析网关关于监控摄像头数据量对云存储服务影响的探讨

在数字化安防监控领域,监控摄像头数据量的激增对云存储服务带来了前所未有的挑战与机遇。随着技术的不断进步和监控需求的日益增长,监控摄像头所产生的数据量正以前所未有的速度增长,这对云存储服务的性能、容量及可靠性提出了更高要求。本文将深入探讨监控摄像头数据量对云…

Slort pg walkthrough Intermediate window

nmap ┌──(root㉿kali)-[~] └─# nmap -p- -A -sS 192.168.226.53 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-12-20 04:30 UTC Stats: 0:01:10 elapsed; 0 hosts completed (1 up), 1 undergoing Service Scan Service scan Timing: About 40.00% done; ETC: 04:…

终身免费下载!小学初中高中电子版教科书下载器

软件介绍 这是一款可以终身免费下载小学初中高中电子版教科书下载器,让学生和家长可以轻松下载和使用。无论是备课、自习还是复习,这些电子版教科书都能为您提供帮助。 软件支持免费下载小学到高中的电子版教科书,书籍版本囊括统编版、人教版、北京版、北师大版、冀教版、苏…

面向教学科研智能感知系统应用开发实验室

车辆感知系统在智能驾驶中扮演着至关重要的角色,它如同车辆的“眼睛”和“耳朵”,负责实时监测和解读周围环境信息。该系统通过集成摄像头、雷达、激光雷达等多种传感器,能够准确识别道路状况、行人和其他车辆,为智能驾驶提供可靠的数据支持。经纬恒润推出面向教学及科研应…

Windows Server 2019 Datacenter 激活码——亲测可用

目前网络上流行的 Windows Server 2019 KMS 激活可以很方便且快速完成激活,而且不用担心安全问题。如果您是计算机运维人员,那么 Windows Server 2019 想必肯定有接触不少,那么现在就来一起看看如何激活该系统吧。 Windows Server 2019 有三个版本,在安装的时候我们可以采用…