
C/C++的文件读取展示的视频播放
前言
作者是先通过剪映,截取视频每一帧(应该没有每一帧)的图片通过一个叫Ascgen2的软件,将图片转换成相应的组成的图形。然后通过c语言的文件读写,将处理好的素材文件打印到控制台(看到这是不是觉得有点low了),但是要通过截取每一帧的图片并且裁剪转换成对应的字符素材,还是很肝了吧。
一、准备工具
1、支持c、c++的编译器
2、剪映(或者任何可以编辑视频的软件)
3、Ascgen2(作者找到的将图片转换为字符的软件)
二、编写代码前需要准备的一些素材
1.处理素材
1、寻找合适的资源视频。(建议不要找太长的,除非你肝上长了个人,或者你会写脚本自动化)
2、利用视频编辑器,裁剪出每一帧的图像。(也可也每两帧一张图)
注意:图片一定要重命名并且排好序,便于后序使用。
3、利用Ascgen2软件将获得的图片转换为字符。
下载Ascgen2->打开Ascgen2->点击左上角的file->点击Load lmage…选择需要转换的图片->然后就可以看到转换的图片了
转换的字符可以在工具栏和两个独立的小框进行调整。
4、然后就可以编写文件读取代码了。
2.编写代码
代码中有超级详细的注释!!!
#define _CRT_SECURE_NO_WARNINGS//让scanf也能运行,而不是scanf_s
#include<iostream>
#include<windows.h>//Sleep睡眠函数在这个头文件
using namespace std;
void getTest(int);//读取文本函数声明
const int N = 43;//这个是文本的数量
int main()
{
char flag = '0';
while (flag != '-1')//设置可以重复播放
{
flag = getchar();//每次播放需要按下任按键
for (int i = 1; i < N; i++)//这里循环将每一个图片读取并打印到控制台
{
getTest(i);
}
}
return 0;
}
char s[160][176];//这是用来存储需要打印的字符信息
//因为一行一行打印观感不好,所以先存起来一页一页打印
//并且每张图片转换成字符后,都是160行176列的
void getTest(int n)
{
//这里我通过将传入的数组转换成字符,然后用文件操作进行读写
//在这之前我的所有文件都改成xx.txt格式,xx表示第几个文件
char arr1[7] = "xx.txt";
//所以只需要将数字转换为字符
//因为只有两位数,所以我就简单写了下
//如果需要转换多位的,就需要写个循环
//while(n !=0)
//{
// int t = n % 10;
// n /= 10;
// ch[i++] = t + 48;
//}
//然后进行字符串翻转,有个函数我记得,或者直接用双指针
if (n / 10 != 0)
{
arr1[1] = n % 10 + 48;
n /= 10;
}
arr1[0] = n + 48;
//然后读取对应文件
FILE* fp = fopen(arr1, "r");
//判断文件是否读取失败
if (fp == NULL)
{
perror("fopen");
}
//如果读取成功就输出文件的内容
else
{
//因为先前已经设置好了文件的行列数,就不需要读取到文件尾部的判断
//而是直接按照自己设置的行列进行读取
for (int j = 0; j < 160; j++)
{
for (int i = 0; i < 176; i++)
{
fscanf(fp, "%c", &s[j][i]);
}
}
//全部读取后再一次性输出到屏幕上
printf("%s\n", s);
//输出完成然后关闭文件
fclose(fp);
//让输出的字符在屏幕上停留一会,让人的眼睛反应过来
Sleep(100);
//等人的眼睛反应过来后就调用控制台指令清空屏幕
//扩展:在DOS窗口(控制台窗口)直接输入cls,就可以清空控制台
//这个函数相当于将字符串在控制台中输入
system("cls");
}
//然后在将指针置空
//这应该是一个合格的程序员必要的操作了
//为了防止出现"野孩子捣乱"
fp = NULL;
//这样一趟下来,就成功输出了一帧图片了,然后退出到主函数,继续循环输出下一帧
//就看可以观看到完整的视频了
}
总结
编程没有天赋而言,只要多敲多练,动脑思考,就能提升!
虽然方法比较简单而且笨拙,是我因为伤病无法打球无聊的突发奇想,但是包含了热爱体现在里面的,相信在以后的不断学习,能够做出更优秀的程序分享给大家。