本文所讲解的12864视频bin文件的合成办法,生成的bin文件,只适用于自己的上一个博客的12864播放视频的代码,其他的博主的代码不支持。
- 先对视频进行截屏,截屏工具用PotPlayer软件,截屏方法自行百度,不在此赘述了,先暂时不考虑截屏的速度(如要考虑,请看第6节),建议差不多一秒13张的速度对一个视频进行截屏。
注意:如果对一个电影进行截屏,一个电影往往上下都有黑边,串口传输本身就慢,传输那些黑边没有一点显示价值,浪费传输速度资源,所以建议用ps批量先处理一下视频,把黑框截去,只保留100%的图像,然后再截图。 - 将截屏的图片批量重命名,办法参考
https://jingyan.baidu.com/article/375c8e19ef567625f2a229c7.html - 用image2lcd软件的高版本对上千的图片进行批量取模,参数见下图,
注意:最大宽度和高度的设置,宽度不能超过128,高度不能超过64 设置完以后,注意一下,image2lcd窗口中间最下面的输出图像,它是实际输出的宽度和高度,宽度不能超过128且高度不能超过64,小于都是可以的。大于则需要重新调整,调整完按一下按钮。另外:image2lcd只能按照比例对图片进行取模,这样也很好,视频图像不压扁和拉伸,显示效果好。image2lcd下载地址参考:https://blog.csdn.net/fantastic_sky/article/details/110530389 - 批量取模以后,会生成上千个与之对应的bin文件。现在需要将这么多的bin文件合成一个bin文件,并加上必要的参数,此时制作bin文件.c的作用就来了。需要的软件是:vc++2010,vc++6.0等可以编译运行c语言的软件
介绍这个文件之前,先介绍几个函数。 代码需要五个核心的函数。include <stdio.h> sprintf fopen fread fwrite fclose 对于开发c语言的上班族而言,这几个函数处处可见,但是对于对电子设备感兴趣的大学生来说,代码接触的少,所以也很少有机会接触到这几个函数的真正用法。 printf大部分上过c语言的同志都知道,它可以在黑框命令行(俗称:终端)上打印一段字符串,%d,%c,%s,应该都知道这个是打印什么的。 sprintf跟printf基本上是一模一样的,但是printf是向终端上输出字符串,而sprintf是向字符数组中输出字符串。这两个函数参数基本一样,只有一个区别,就是sprintf比printf最前面多一个参数,char型指针,传一个字符数组即可,后面写法和printf一样,这样printf组合成的字符串,就直接被填到数组了。若此时打印这个字符数组,它的结果就是这个组合的字符串。如此一来,批量的bin文件名的问题就解决了 比如批量的bin文件叫 a(xxx).bin,xxx是数字,总共有1000个bin,那就是xxx是1-1000。 可以写代码:
int i;
char binFile[100];
for(i = 1;i <= 1000;i ++)
{
sprintf(binFile, "路径/a(%d).bin", i);
...
...
}
- 后面四个函数,均为标准io函数,他可以读写文件,现在代码上已经知道文件名了,就很容易对文件进行读写了,无非就是从一个文件中读取数据,存在字符数组中,然后,再把字符数组写到另外一个文件里。我想讲到这,估计就不用再讲了,书本上,网上标准IO资料多的是,可以自行学习。
在这里,可以介绍一下一个容易被所有初学计算机的同志混淆的知识,那就是在计算机的世界里,所有文件都是二进制,不管是什么后缀名,没有任何区别。不同的后缀名只代表他二进制的编排格式不一样,读文件时,要按照它的格式,才能正确解读到有效的信息。比如很多图片文件,都是前几个字节代表文件头,几个字节代表什么什么,如果不按他的标准来解读文件,根本不知道他是个什么图片。 知道这个之后,还有一个点需要注意,该c文件,开始时,会向合并的bin文件中写入5个字节,分别是单个bin文件大小(两个字节),图片高度(一个字节),要显示到的位置高度(一个字节),要显示到的位置宽度(一个字节),其中,要显示到的位置宽度中,1代表16个点,比如:设置要显示的位置高度和要显示到的位置宽度是6,2,他会在12864的左上角,向下6个点,向右32个点处显示视频,所以设置时要注意,不要太靠右。 根据上面的理解,现在就可以更改源码,标红的是必须要改的,按照取模长宽,文件大小等去改,绿色的可以改,也可以不改。改完编译运行,就可以生成可以使用的bin文件了。 - 视频同步原理
做到上面之后,就可以显示视频了,但是时间往往上不同步,现在可以采用一种办法,近似同步。发送bin文件时,是115200的波特率,就是11520字节/每秒,比如,视频截图后,一张图片取模生成的单个bin文件是1152字节,这种传输速度发这个图片只能是1秒发10张,所以截屏时,截屏速度,也设置成1秒截10张,就是0.1秒截一次屏,这样图片取模生成的bin文件,就是时间同步的。 上面简化成公式就是 截屏速度(秒/次) = 单个bin文件大小 / 11520 截屏时采用上述计算的速度,就是同步的,否则不同步。
|