c/c++
文章平均质量分 56
c/c++相关
0点51胜
这个作者很懒,什么都没留下…
展开
-
ffmpeg通过 av_dict_set 设置参数
ffmpeg 设置参数原创 2023-02-10 13:44:22 · 1674 阅读 · 0 评论 -
Direct3D 11 总结 —— 10 变换
_mm_set_ps 是倒叙放置的,参考原创 2022-05-15 23:34:47 · 505 阅读 · 0 评论 -
Direct3D 11 总结 —— 9 通过键盘调整绿幕抠图阈值
介绍本文主要介绍如何通过键盘设置绿幕抠图的阈值,通过设置不同的阈值,看最终的结果。最终结果阈值为 0.9阈值为 0.2阈值为 0.5知识点获取键盘输入当键盘按下后,会给窗口的回调函数,传入 msg:WM_KEYDOWN 事件,并通过 wparam 参数,传入是哪个键按下了。然后窗口回调通过事件的方式通知到 Graphics。将阈值传到 shader 中directX 中有个常量值 vertex shader 和 pixel shader 都可以设置,说是常量值,但是该值是可以改变原创 2022-05-03 23:26:41 · 1211 阅读 · 0 评论 -
Direct3D 11 总结 —— 8 实现简单的绿幕抠图效果
介绍绿幕抠图指将图片中的绿色扣去,并将该处的 alpha 分量设为 0,并将另外一张图片作为背景,以实现背景替换的功能,常用于电影和电视的制作场景。最终效果原始图片绿幕抠图后效果代码这一块的代码改动,主要在像素着色器 shader。ps shader本文只是实现了最简单的绿幕抠图,对于这种比较完美的图片,抠图效果较好,对于其他图片还有较大的优化空间。Texture2D tex : register(t0);SamplerState samplerLinear : register(s原创 2022-04-17 20:32:24 · 1010 阅读 · 0 评论 -
Direct3D 11 总结 —— 7 实现透明效果
介绍当两张图片重叠的时候,可以一张完全盖住另外一张,也可以实现两张图片融合的结果。本文将对图片融合展开介绍。融合的公式如下 C=Csrc⊕Fsrc1ΘCdst⊕Fdst1\ C = C_{src}\oplus F_{src1} \Theta C_{dst} \oplus F_{dst1} C=Csrc⊕Fsrc1ΘCdst⊕Fdst1 A=Asrc⊕Fsrc2ΘAdst⊕Fdst2\ A = A_{src}\oplus F_{src2} \Theta A_{ds原创 2022-04-17 19:46:31 · 1065 阅读 · 0 评论 -
Direct3D 11 总结 —— 6 绘制图片
介绍本文将在上文绘制的矩形中,绘制图片。主要步骤读取图片,并转化为纹理。将该纹理绑定到 Pipeline设置采样器,像素着色器通过该采样器对输出的纹理进行采样代码主要改动CreateWICTextureFromFile通过该函数将图片数据,读取到纹理中。 该函数来自于DirectXTex,引用了WICTextureLoader11.cpp / WICTextureLoader11.h主要向 pipeline 绑定了两个资源PSSetShaderResources读取图片到纹理,然后原创 2022-04-16 22:39:09 · 1824 阅读 · 0 评论 -
Direct3D 11 总结 —— 5 绘制矩形
介绍本文,将在上文的基础上,绘制矩形区域。一般 direct3D 通过绘制三角形,拼成其他图像,对于矩形,本文将绘制两个三角形,以拼成一个矩形。代码主要修改点输入装配阶段一个是输入的坐标点数,之前是3个点,本文输入的 4个点。绘制2个三角形,有两种方式,一种是输入6个点,其中有2对点是一样的。另外一种方式是输入4个点,在加上6个索引点。绘制命令针对两种输入方式,有两个对应的绘制命令。m_pContext->Draw(6, 0); 通过输入顶点绘制6个点绘制图形m_pContex原创 2022-04-13 23:23:21 · 1353 阅读 · 0 评论 -
Direct3D 11 总结 —— 4 绘制三角形
介绍本文主要介绍如何使用 direct3D 11 绘制三角形。pipeline 介绍从 msdn 的文章,可以获得 direct3D 的 pipeline 如下图所示,对于本文只需要设置红框内的部分。输入装配阶段在这里需要将顶点坐标、顶点数据是使用什么格式保存的(float 还是 int;是几位的等)、想要顶点组成什么图像(比如传入3个点,你可能就是想画3个点或者一条线和1一个点或者一个三角形等)顶点着色器阶段着色器就是 gpu 执行的代码,gpu 的特点是计算单元的算力有线,但是每个 gp原创 2022-04-13 00:06:30 · 980 阅读 · 0 评论 -
Direct3D 11 总结 —— 3 初始化 direct3D,并改变窗口颜色
介绍创建窗口成功之后,就要使用 direct3D 进行绘图,本节主要介绍,如何初始化 direct3D,并通过 direct3D改变窗口颜色。初始化 direct3D函数解释D3D11CreateDevice通过 D3D11CreateDevice 函数创建设备和上下文,device 主要用于显示是否支持某些特性和分配资源,context 主要用于设置渲染状态、将资源绑定到 pipeline 和 发出渲染命令。需要设置的参数有 使用的电脑上的哪个显卡(现在很多电脑上多有两块显卡,独立显卡和集成显卡原创 2022-04-10 19:28:11 · 1394 阅读 · 0 评论 -
DirectX3D 11 总结 —— 2 win32 窗口 抽象为类
说明为了代码看起来清爽一点,将上篇文章中的代码进行封装,抽象为一个类。这篇的核心是HWND hWnd = CreateWindow(WindowClass::GetInstance().get()->GetName(), // 创建的窗口类名 TEXT("First Window"), // 窗口名称 WS_OVERLAPPEDWINDOW, // 窗口类型 200, 200, // 窗口起始位置 400,原创 2022-04-10 16:00:39 · 492 阅读 · 0 评论 -
DirectX3D 11 总结 —— 1 绘制 win32 窗口
directX 3D 是什么DirectX 3D是一种应用程序的接口(API),它可让以windows为平台的游戏或多媒体程序获得更高的执行效率,加强3d图形和声音的效果,并提供设计人员一个共同的硬件驱动标准,让游戏开发者不必为每一品牌的硬件来写不同的驱动程序,也降低用户安装及设置硬件的复杂度。简单理解就是 windows 为了方便开发者驱动显卡运行,定义了一套 API标志,封装了硬件之间的差异,提供开发者的开发效率。绘制窗口directX 3D 主要用于图像的显示,因此首先需要创建一个窗口用于显示原创 2022-04-10 00:47:10 · 901 阅读 · 0 评论 -
visual studio调试记录
使用 OutputDebugString 函数将调试信息打印到 visual studio 输出窗口。参考:https://blog.csdn.net/u012308586/article/details/92992951原创 2022-03-10 10:37:38 · 1081 阅读 · 0 评论 -
if ((x - 0x01010101) & (~x) & 0x80808080) 理解
if ((x - 0x01010101) & (~x) & 0x80808080)为了说明方便,可以将 x 看成只有一个字节,则上面的问题可以简化为if ((x - 0x01) & (~x) & 0x80)先看 0x80 对应二进制 0b1000,0000 与该字节进行按位取与,只有在 (x-0x01) 和 (~x) 第8位都为1的情况下,该 if 条件才会成立。对于 (x-0x01) ,只有 x =0 或者 x>0x80,其第8位才为1。对于 (~原创 2022-03-01 22:29:03 · 603 阅读 · 2 评论 -
rtmp源码分析之RTMP_Write 和 RTMP_SendPacket
typedef struct RTMPPacket { uint8_t m_headerType; // chunk type id (2bit)fmt 对应message head {0,3,7,11} + (6bit)chunk stream id /*大部分情况是一个字节 uint8_t m_packetType; // Message type ID(1-7协议控制;8,9音视频;10以后为AMF编码消息) uint8_t m_hasAbsTimestamp; /* timesta原创 2022-02-27 22:21:46 · 638 阅读 · 0 评论 -
c++ 文件操作 常用内容总结
为了永久保存数据,或从之前保存的数据中获取数据。常常需要对文件进行操作,下面对常用的内容进行总结。1.打开和关闭文件要操作文件,首先要打开和关闭文件。c++ 有两种方式打开文件第一种:使用带有文件路径的构造函数,其内部会自动打开文件fstream file(filePath);第二种:先创建一个 fstream 对象,然后调用 open 函数,传入文件路径fstream file;file.open(filePath);两种方式关闭文件第一种:超出 fstream 对象作用域原创 2022-01-09 15:49:59 · 1427 阅读 · 0 评论 -
小番茄插件(VAssist)和Visual studio 自带,常用快捷键整理
命令功能Shift+Alt+O查找文件Shift+Alt+S查找某个变量名Shift+Alt+F找到所有引用某个字符串的地方Alt+G在声明和定义之间互相跳转Alt+O在.h文件和.cpp文件之间互跳Alt+Shift+R变量重命名,会找到所有使用该变量的地方Ctrl K+D自动整理代码格式...原创 2021-07-06 21:35:49 · 2144 阅读 · 0 评论 -
C语言中用scanf连续输入两个字符类型的问题
昨天用C编程,遇到一个关于scanf的细节问题,假如运行如下程序:#include<stdio.h>int main(){char ch1,ch2;printf("Input for ch1:/n");scanf("%c",&ch1);printf("ch1=%c/n",ch1);printf("Input for ch2:/n");scanf(...原创 2018-08-10 16:23:44 · 19223 阅读 · 0 评论 -
c++总结核心
代码存储区域分成哪些代码段、数据段、BSS段、堆区、文件映射区以及栈区代码段:包括只读存储区和文本区,其中只读存储区存储字符串常量,文本区存储程序的机器代码。数据段:存储程序中已初始化的全局变量和静态变量bss 段:存储未初始化的全局变量和静态变量(局部+全局),以及所有被初始化为0的全局变量和静态变量。堆区:调用new/malloc函数时在堆区动态分配内存,同时需要调用delete/free来手动释放申请的内存。映射区:存储动态链接库以及调用mmap函数进行的文件映射栈:使用栈空间存储函数的原创 2020-11-02 16:05:29 · 658 阅读 · 0 评论 -
通过 erase 删除 vector 中的指定元素
for (auto it1 = vec_in.begin(); it1 != vec_in.end(); ) { cout << *it1<<" "; if (*it1 == 2) { it1 = vec_in.erase(it1); } else { it1++; } }erase会返回下一个有效的迭代器原创 2020-11-02 11:34:12 · 156 阅读 · 0 评论 -
交换两个变量中值的进一步认识
题目:交换 x, y 两个变量中的值。#include<iostream>using namespace std;void swap(int a, int b){ int temp; temp=a; a=b; b=temp;}void swap2(int* a,int *b){ int temp; temp=*a; *a=*b; *b=temp;}int main(){ int x=1,y=2; cout<<x<<" "<原创 2020-11-01 12:32:19 · 179 阅读 · 0 评论 -
windows下c++程序与python程序间通信
c++收//server//命名管道采用基于连接的可靠传输方式,只能一对一传输#include <windows.h>#include <iostream>#define BUF_SIZE 1024using std::cerr;using std::cout;using std::endl;int main(){ HANDLE h_pip...原创 2020-02-06 23:52:23 · 1877 阅读 · 3 评论 -
vscode C语言环境配置
1.安装VScode2.安装插件3.下载gccMinGW大概50M左右,11几M的那个不好不能用4.将文件解压放到相应的位置,然后将bin文件的目录放置到环境变量,这样就可以在terminal中调用bin中的gcc,gdb等文件。5.在终端输入gcc -v6.现在就可以通过终端编译文件了 gcc -g test.c -o test.exe ./test7.配置debug...原创 2019-12-01 00:36:01 · 731 阅读 · 0 评论 -
vscode windows10 opencv c++ 环境配置
主要参考记录一下对c_cpp_properties.json中includePath的一点认识。我认为这里的includePath是告诉vscode,去哪里找头文件,这样在写代码的时候可以使用自动补全功能,而且不会有下划线警告。但是函数编译的时候,他会找不到头文件的路径。当编译的时候,你还要告诉编译器去哪里找头文件,tasks.json 中的"-I", "D:\opencv\build\in...原创 2019-12-01 21:04:27 · 1234 阅读 · 0 评论 -
二叉树创建
typedef struct BiTNode{ /* data */ TElemType data; struct BiTNode *lchild,*rchild;}BiTNode,*BiTree;void createBitree(BiTree *T,char list[][3]){ static int i=0; if(strcmp(list[...原创 2019-12-27 21:51:36 · 147 阅读 · 0 评论