制作bin文件.c解读

本文所讲解的12864视频bin文件的合成办法,生成的bin文件,只适用于自己的上一个博客的12864播放视频的代码,其他的博主的代码不支持。

  1. 先对视频进行截屏,截屏工具用PotPlayer软件,截屏方法自行百度,不在此赘述了,先暂时不考虑截屏的速度(如要考虑,请看第6节),建议差不多一秒13张的速度对一个视频进行截屏。
    注意:如果对一个电影进行截屏,一个电影往往上下都有黑边,串口传输本身就慢,传输那些黑边没有一点显示价值,浪费传输速度资源,所以建议用ps批量先处理一下视频,把黑框截去,只保留100%的图像,然后再截图。
  2. 将截屏的图片批量重命名,办法参考
    https://jingyan.baidu.com/article/375c8e19ef567625f2a229c7.html
  3. 用image2lcd软件的高版本对上千的图片进行批量取模,参数见下图,
    注意:最大宽度和高度的设置,宽度不能超过128,高度不能超过64图片取模参数
    设置完以后,注意一下,image2lcd窗口中间最下面的输出图像,它是实际输出的宽度和高度,宽度不能超过128且高度不能超过64,小于都是可以的。大于则需要重新调整,调整完按一下按钮。另外:image2lcd只能按照比例对图片进行取模,这样也很好,视频图像不压扁和拉伸,显示效果好。image2lcd下载地址参考:https://blog.csdn.net/fantastic_sky/article/details/110530389
  4. 批量取模以后,会生成上千个与之对应的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);
		//i为1,binFile里就是"路径/a(1).bin",i为2,binFile里就是"路径/a(2).bin"
		//binFile就是bin文件的文件名了,就可以用这个去打开文件了。
		...
		//打开文件,读文件,写文件,关闭文件等操作
		...
	}
  1. 后面四个函数,均为标准io函数,他可以读写文件,现在代码上已经知道文件名了,就很容易对文件进行读写了,无非就是从一个文件中读取数据,存在字符数组中,然后,再把字符数组写到另外一个文件里。我想讲到这,估计就不用再讲了,书本上,网上标准IO资料多的是,可以自行学习。
    在这里,可以介绍一下一个容易被所有初学计算机的同志混淆的知识,那就是在计算机的世界里,所有文件都是二进制,不管是什么后缀名,没有任何区别。不同的后缀名只代表他二进制的编排格式不一样,读文件时,要按照它的格式,才能正确解读到有效的信息。比如很多图片文件,都是前几个字节代表文件头,几个字节代表什么什么,如果不按他的标准来解读文件,根本不知道他是个什么图片。
    知道这个之后,还有一个点需要注意,该c文件,开始时,会向合并的bin文件中写入5个字节(见数组xin[5]),分别是单个bin文件大小(两个字节),图片高度(一个字节),要显示到的位置高度(一个字节),要显示到的位置宽度(一个字节),其中,要显示到的位置宽度中,1代表16个点,比如:设置要显示的位置高度和要显示到的位置宽度是6,2,他会在12864的左上角,向下6个点,向右32个点处显示视频,所以设置时要注意,不要太靠右。
    根据上面的理解,现在就可以更改源码,标红的是必须要改的,按照取模长宽,文件大小等去改,绿色的可以改,也可以不改。改完编译运行,就可以生成可以使用的bin文件了。**注意:**有的img2lcd生成的是ebm文件,不是bin文件,bin和ebm都是二进制,后缀名是啥无所谓,如果你生成的文件是ebm的,下面的图片中的文字提示,自行将bin改成ebm就行了。

在这里插入图片描述

需要修改的东西2
6. 视频同步原理
做到上面之后,就可以显示视频了,但是时间往往上不同步,现在可以采用一种办法,近似同步。发送bin文件时,是115200的波特率,就是11520字节/每秒,比如,视频截图后,一张图片取模生成的单个bin文件是1152字节,这种传输速度发这个图片只能是1秒发10张,所以截屏时,截屏速度,也设置成1秒截10张,就是0.1秒截一次屏,这样图片取模生成的bin文件,就是时间同步的。
上面简化成公式就是
截屏速度(秒/次) = 单个bin文件大小 / 11520
截屏时采用上述计算的速度,就是同步的,否则不同步。

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值