ffmpeg-SDL顯示BMP

效果圖如下
在這里插入圖片描述

在這里插入圖片描述
本文主要將我們通過創建窗口、渲染上下文工具、紋理工具、矩形框工具;其需要主要的是:首先我們在顯示BMP時,需要先創建好窗口,再使用渲染工具對窗口進行格式刷,使用紋理工具和渲染工具配合進行BMP圖片顯示,矩形框的作用就是顯示BMP圖片的大小。

下面小例子就是當鼠標點擊時,會通過texture紋理工具,使用渲染拷貝一份紋理顯示至window窗口

#include "playthread.h"
#include <SDL2/SDL.h>
#include <QDebug>
#include <QFile>//#號自動添加雙引號“”
#define END(judge,SDL_Init) \if(judge) \{\qDebug() << #SDL_Init << "error" << SDL_GetError();\goto end;\}playThread::playThread(QObject *parent) : QThread(parent)
{//監聽線程,線程結束后自動釋放線程內存connect(this,&playThread::finished,this,&playThread::deleteLater);
}playThread::~playThread()
{disconnect();//?requestInterruption();quit();wait();qDebug() << "析構了";
}void playThread::run()
{//創建窗口SDL_Window *window = nullptr;//渲染上下文SDL_Renderer *renderer = nullptr;//紋理(直接跟特定驅動程序相關的像素數據)SDL_Texture *texture = nullptr;//矩形框SDL_Rect dstRect = {0,0,50,50};//初始化子系統END(SDL_Init(SDL_INIT_VIDEO),SDL_Init);//創建一個窗口//標題-X-Y-width-heightwindow = SDL_CreateWindow("SDL修改渲染目標",SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,500,500,SDL_WINDOW_SHOWN);END(!window,SDL_CreateWindow);//創建渲染上下文--用于渲染圖形到窗口//這SDL_RENDERER_ACCELERATED -- 個標志告訴 SDL 嘗試創建一個使用硬件加速的渲染器//SDL_RENDERER_PRESENTVSYNC -- 這個標志使渲染器的呈現操作同步到顯示器的垂直同步(VSync)renderer = SDL_CreateRenderer(window, -1,SDL_RENDERER_ACCELERATED |SDL_RENDERER_PRESENTVSYNC);//如果創建失敗if(!renderer){renderer = SDL_CreateRenderer(window,-1,0);END(!renderer,SDL_CreateRenderer);}//創建紋理texture = createTexture(renderer);END(!texture,SDL_CreateTextureFromSurface);//設置渲染目標為windows -- nullptr默認為windowsEND(SDL_SetRenderTarget(renderer,nullptr),SDL_SetRenderTarget);//設置繪制顏色(畫筆顏色)END(SDL_SetRenderDrawColor(renderer,0,0,0,SDL_ALPHA_OPAQUE),SDL_SetRenderDrawColor);//用繪制顏色(畫筆顏色)清除渲染目標---也就是覆蓋END(SDL_RenderClear(renderer),SDL_RenderClear);//拷貝紋理到渲染目標END(SDL_RenderCopy(renderer,texture,nullptr,&dstRect),SDL_rSDL_RenderCopyen);//更新所有的渲染操作到屏幕上SDL_RenderPresent(renderer);//等待退出事件while(!isInterruptionRequested()){SDL_Event event;SDL_WaitEvent(&event);switch(event.type){case SDL_QUIT:{goto end;break;}case SDL_MOUSEBUTTONUP:{showClick(event,renderer,texture);break;}}}end:SDL_DestroyRenderer(renderer);SDL_DestroyTexture(texture);SDL_DestroyWindow(window);SDL_Quit();//初始化子系統后必須做一個退出操作
}SDL_Texture *playThread::createTexture(SDL_Renderer *renderer)
{//創建一個紋理對象SDL_Texture *texture = SDL_CreateTexture(renderer,SDL_PIXELFORMAT_RGB24,SDL_TEXTUREACCESS_TARGET,50,50);if(!texture){//創建失敗return nullptr;}//設置紋理為渲染目標if(SDL_SetRenderTarget(renderer,texture)){return nullptr;}//設置顏色if(SDL_SetRenderDrawColor(renderer,255,255,0,SDL_ALPHA_OPAQUE)){return nullptr;}//畫圖形SDL_Rect rect = {0,0,50,50};if(SDL_RenderDrawRect(renderer,&rect)){return nullptr;}if(SDL_RenderDrawLine(renderer,0,0,50,50)){return nullptr;}if(SDL_RenderDrawLine(renderer,50,0,0,50)){return nullptr;}return texture;
}void playThread::showClick(SDL_Event &event, SDL_Renderer *renderer,SDL_Texture *texture)
{SDL_MouseButtonEvent btn = event.button;int w = 0,h = 0;if(SDL_QueryTexture(texture,nullptr,nullptr,&w,&h)){return;}int x = btn.x - (w >> 1);int y = btn.y - (h >> 1);SDL_Rect dstRect = {x,y,w,h};//SDL_RenderClear(renderer);//賦值紋理到渲染目標SDL_RenderCopy(renderer,texture,nullptr,&dstRect);//更新渲染操作到屏幕上SDL_RenderPresent(renderer);
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/63403.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/63403.shtml
英文地址,請注明出處:http://en.pswp.cn/web/63403.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

多音軌視頻使用FFmpeg刪除不要音軌方法

近期給孩子找宮崎駿動畫&#xff0c;但是有很多是多音軌視頻但是默認的都是日語&#xff0c;電視上看沒辦法所以只能下載后刪除音軌文件只保留中文。 方法分兩步&#xff0c;先安裝FFmpeg在轉文件即可。 第一步FFmpeg安裝 FFmpeg是一個開源項目&#xff0c;包含了處理視頻的…

基礎二分查找總結題-單峰序列2類做法

&#x1f330;單峰序列題目描述 晴問算法 題目描述&#xff1a; 單峰序列是指&#xff0c;在這個序列中存在一個位置&#xff0c;滿足這個位置的左側&#xff08;含該位置&#xff09;是嚴格遞增的、右側&#xff08;含該位置&#xff09;是嚴格遞減的&#xff0c;這個位置被…

【SH】Ubuntu Server 24搭建Web服務器訪問Python程序研發筆記

文章目錄 說個問題寫個方案一、安裝Ubuntu Server二、安裝Web服務器采用Nginx服務器 三、安裝Python及依賴創建項目虛擬環境 四、安裝Python Web框架采用Flask框架創建和運行Flask應用&#xff08;以后的重點&#xff09; 五、安裝WSGI服務器采用Gunicorn 六、配置Nginx七、驗證…

Vue3 重置ref或者reactive屬性值

需要重新定義一個對象綁定復制給原對象 。 實例代碼: const data () > ({groupId: ,groupCode: ,groupName: ,groupType: ,});const formData ref(data());//重置對象值 const reset()>{Object.assign(formData, data()…

C#速成(GID+圖形編程)

常用類 類說明Brush填充圖形形狀,畫刷GraphicsGDI繪圖畫面&#xff0c;無法繼承Pen定義繪制的對象直線等&#xff08;顏色&#xff0c;粗細&#xff09;Font定義文本格式&#xff08;字體&#xff0c;字號&#xff09; 常用結構 結構說明Color顏色Point在平面中定義點Rectan…

vue iframe進行父子頁面通信并切換URL

使用通義千問提問后得到一個很好的示例。 需求是2個項目需要使用同一個面包屑進行跳轉&#xff0c;其中一個是iframe所在的項目&#xff0c;另一個需要通過地址訪問。通過 window.parent.postMessage &#xff0c;幫助 <iframe> 內嵌入的子頁面和其父頁面之間進行跨域通…

誰說C比C++快?

看到這個問題&#xff0c;我我得說&#xff1a;這事兒沒有那么簡單。 1. 先把最大的誤區打破 "C永遠比C快" —— 某位1990年代的程序員 這種說法就像"自行車永遠比汽車省油"一樣荒謬。我們來看個例子&#xff1a; // C風格 char* str (char*)malloc(100…

【ADS射頻電路學習筆記】1. ADS基本操作

下面介紹ADS中主要仿真器的使用 1. 直流仿真 直流仿真器在控制面板的simulator-dc 直流仿真器 但是ADS自帶有很多仿真器&#xff0c;可以直接來調用 選用晶體管電流掃描的模板 就可以輸出模板 然后調入晶體管模型 然后要設置掃描的電壓&#xff0c;選擇dc仿真器對vds進行掃描…

CSS學習記錄12

CSS浮動 CSSfloat屬性規定元素如何浮動 CSSclear屬性規定哪些元素可以在清除的元素旁邊以及在哪一側浮動。 float屬性 float屬性用于定位和格式化內容&#xff0c;例如讓圖像向左浮動到容器的文本那里。 float屬性可以設置以下值之一&#xff1a; left - 元素浮動到其容器…

Chinese-Clip實現以文搜圖和以圖搜圖(transformers版)

本文不生產技術&#xff0c;只做技術的搬運工&#xff01; 前言 作者昨天使用cn_clip庫實現了一版&#xff0c;但是覺得大家復現配置環境可能有點復雜&#xff0c;因此有使用transformers庫實現了一版&#xff0c;提供大家選擇&#xff0c;第一篇參考鏈接如下&#xff1a; Ch…

【Unity3D】無限循環列表(擴展版)

基礎版&#xff1a;【Unity技術分享】UGUI之ScrollRect優化_ugui scrollrect 優化-CSDN博客 using UnityEngine; using UnityEngine.UI; using System.Collections.Generic;public delegate void OnBaseLoopListItemCallback(GameObject cell, int index); public class BaseLo…

MSSQL AlwaysOn 可用性組(Availability Group)中的所有副本均不健康排查步驟和解決方法

當遇到 MSSQL AlwaysOn 可用性組(Availability Group)中的所有副本均不健康的情況時(MSSQL AG 副本名稱: All replicas unhealthy),這通常意味著可用性組無法正常工作,數據同步和故障轉移功能可能受到影響。以下是一些可能的原因及相應的排查步驟和解決方法: 1. 檢查副本…

springboot檢測配置是否存在,如果存在則返回,不存在則提示新增

我這里是以七牛為例子 在yml中添加七牛的相關配置 qiniu: #七牛的相關配置accessKey: your_access_keysecretKey: your_secret_keybucket: your_bucket_namedomain: your_domain 對應在給配置文件來一個相應的實體類QiniuConfig Component ConfigurationProperties(prefix &…

[NOIP2016 普及組] 海港 -STL-隊列queue

[NOIP2016 普及組] 海港 題目背景 NOIP2016 普及組 T3 題目描述 小 K 是一個海港的海關工作人員&#xff0c;每天都有許多船只到達海港&#xff0c;船上通常有很多來自不同國家的乘客。 小 K 對這些到達海港的船只非常感興趣&#xff0c;他按照時間記錄下了到達海港的每一…

【Vulkan入門】16-IndexBuffer

TOC 先叨叨 上篇介紹了如何使用VertexBuffer傳入頂點信息。兩個多星期了我們一直在玩三個點&#xff0c;本篇介紹如何渲染更多的點。 在渲染前考慮一個問題&#xff0c;渲染一個三角形需要三個點&#xff0c;渲染兩個相接的三角形需要幾個點&#xff1f; 答案是6個點&#xf…

IDEA 打包普通JAVA項目為jar包

需求&#xff1a;普通java項目&#xff08;有添加依賴的jar包&#xff09;&#xff0c;沒有用maven管理依賴和打包&#xff0c;要打成jar包&#xff0c;包可以用“java -jar 包名” 啟動程序。 講如何打包前&#xff0c;先記錄下普通項目的目錄結構和怎么添加依賴包 1.目錄結…

python的流程控制語句之制作空氣質量評估系統

&#x1f468;?&#x1f4bb;個人主頁&#xff1a;開發者-曼億點 &#x1f468;?&#x1f4bb; hallo 歡迎 點贊&#x1f44d; 收藏? 留言&#x1f4dd; 加關注?! &#x1f468;?&#x1f4bb; 本文由 曼億點 原創 &#x1f468;?&#x1f4bb; 收錄于專欄&#xff1a…

Docker Compose 多應用部署 一鍵部署

介紹 Docker Compose通過一個單獨的docker-compose.yml模板文件(YAML格式)來定義一組相關聯的應用容器&#xff0c;幫助我們實現多個相互關聯的Docker容器的快速部署。 如&#xff1a;springbootmysqlnginx 如果一個個去部署他會非常的麻煩&#xff0c;這時候可以選擇Docker …

【數據結構——線性表】單鏈表的基本運算(頭歌實踐教學平臺習題)【合集】

目錄&#x1f60b; 任務描述 相關知識 測試說明 我的通關代碼: 測試結果&#xff1a; 任務描述 本關任務&#xff1a;編寫一個程序實現單鏈表的基本運算。 相關知識 為了完成本關任務&#xff0c;你需要掌握&#xff1a;初始化線性表、銷毀線性表、判定是否為空表、求線性…

git branch -r(--remotes )顯示你本地倉庫知道的所有 遠程分支 的列表

好的&#xff0c;git branch -r 這個命令用于列出遠程分支。讓我詳細解釋一下&#xff1a; 命令&#xff1a; git branch -rdgqdgqdeMac-mini ProductAuthentication % git branch -rorigin/main作用&#xff1a; 這個命令會顯示你本地倉庫知道的所有 遠程分支 的列表。它不…