202408830使用python3给BGR3的裸图加上文件头
 2024/8/30 20:20
 缘起,获取SONY索尼的8530的机芯的4K的BGR3的裸图。可以使用7-yuv打开了。
 如果直接可以给这张YUV图加上BMP格式的文件头,就可以直接使用标准的图像处理软件/ACDSee5.0打开了!
 这样就会给调试过程中带来【极大的】方便!

公司不方便找到4K显示器,于是用家里的电脑截屏了一张BMP的4K/3840x2160分辨率的BMP图。
画图应用程序的原始/默认分辨率是你的电脑的主显示器的分辨率。
 比如我用的笔记本电脑是1080p/1k,也就是1920x1080了!
 好久没有碰C/C++了,直接使用python3来完成这项工作了。
 首先,使用WIN11自带的画图工具生成一张4K分辨率的BMP图,然后使用python3读取前54个字节。
 之后,与BGR3格式的裸图进行组装即可得到正常的4K分辨率的8530的机芯图。
 python3的参考源码:
 D:\4K>
 D:\4K>python
 Python 3.11.4 (tags/v3.11.4:d2340ef, Jun  7 2023, 05:45:37) [MSC v.1934 64 bit (AMD64)] on win32
 Type "help", "copyright", "credits" or "license" for more information.
 >>> with open('test_0.yuv', 'rb') as source_file, open('4K.bmp', 'rb') as temp_file, open('target.bmp', 'wb') as target_file:
 ...     data = temp_file.read(54)
 ...     target_file.write(data)
 ...     data = source_file.read()
 ...     target_file.write(data)
 ...
 54
 24883200
 >>>
# 打开源文件和目标文件
 with open('test_0.yuv', 'rb') as source_file, open('4K.bmp', 'rb') as temp_file, open('target.bmp', 'wb') as target_file:
     # 读取源文件内容【BMP文件头】
     //data = temp_file.read()
     data = temp_file.read(54)
     # 将内容写入目标文件
     target_file.write(data)
     # 读取源文件内容【BGR3的裸图】
     data = source_file.read()
     # 将内容写入目标文件
     target_file.write(data)

唯一的小小的遗憾:生成的图是倒立的!
 百度:BMP图 坐标系
很容易知道BGR3图的坐标系原点在左上角,BMP图的坐标系原点在左下角。
 这样你组装后的图片就正好是倒立的!
 参开资料:
 https://blog.csdn.net/wowocpp/article/details/80805534
 windows 坐标系 与 BMP 像素的映射关系

 百度:Python读取二进制文件
 !!!!
 https://www.jb51.net/python/313993top.htm
 Python读写二进制文件的示例详解【不能拷贝】
 https://blog.csdn.net/m0_59236602/article/details/135714899
 Python编程中如何读写二进制文件?
 三、实际应用示例
 2.复制二进制文件
 有时候,我们需要将一个二进制文件复制到另一个文件中。下面是一个复制二进制文件的示例代码:
# 打开源文件和目标文件
 with open('source.bin', 'rb') as source_file, open('target.bin', 'wb') as target_file:
     # 读取源文件内容
     data = source_file.read()
     # 将内容写入目标文件
     target_file.write(data)
 https://blog.51cto.com/u_14844/11329687
 python打开二进制dat文件 python 处理二进制文件 
 https://blog.51cto.com/u_16175494/7637992
 python读取2进制文件
 https://blog.csdn.net/weixin_44609920/article/details/130163005
 5.7:Python如何读取二进制文件?
 百度:python打印16进制数
 python文件之二进制文件的读写
 python 二进制读取 前55个字节
!!!!
 https://blog.51cto.com/u_16213385/7658233
 python 读取二进制文件 部分字节
使用Python读取部分字节
 在Python中,我们可以使用open()函数来打开一个二进制文件,并使用read()方法来读取文件的内容。默认情况下,read()方法会一次性读取整个文件的内容。但是我们可以通过指定读取的字节数来读取文件的部分内容。
下面是一个简单的示例代码,演示了如何读取二进制文件的部分字节:
with open('file.bin', 'rb') as f:
     # 读取前100个字节
     data = f.read(100)
     print(data)
 百度:PYTHON格式化输出f
 https://blog.csdn.net/pumpkin84514/article/details/140628581
 python——格式化输出
 https://www.cnblogs.com/fat39/p/7159881.html
 python基础_格式化输出(%用法和format用法)
 百度:python 循环
 https://www.jb51.net/article/45864.htm
 Python中for循环详解
>>> for i in range(5):             (1)
 ...     print i
 0
 1
 2
 3
 4
D:\4K>python
 Python 3.11.4 (tags/v3.11.4:d2340ef, Jun  7 2023, 05:45:37) [MSC v.1934 64 bit (AMD64)] on win32
 Type "help", "copyright", "credits" or "license" for more information.
>>> with open('4k.bmp', 'rb') as source_file:
 ...     data = source_file.read(54)
 ...     print(data)
 ...
 b'BM6\xb0{\x01\x00\x00\x00\x006\x00\x00\x00(\x00\x00\x00\x00\x0f\x00\x00p\x08\x00\x00\x01\x00\x18\x00\x00\x00\x00\x00\x00\xb0{\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
 >>> print(data[0])
 66
 >>> print('0x%02d', data[0])
 0x%02d 66
 >>> print('0x%02d'% data[0])
 0x66
>>> for i in range(54):
 ...     print('0x%02x, '% data[i])
 ...
 0x42,
 0x4d,
 0x36,
 0xb0,
 0x7b,
 0x01,
 0x00,
 0x00,
 0x00,
 0x00,
 0x36,
 0x00,
 0x00,
 0x00,
 0x28,
 0x00,
 0x00,
 0x00,
 0x00,
 0x0f,
 0x00,
 0x00,
 0x70,
 0x08,
 0x00,
 0x00,
 0x01,
 0x00,
 0x18,
 0x00,
 0x00,
 0x00,
 0x00,
 0x00,
 0x00,
 0xb0,
 0x7b,
 0x01,
 0x00,
 0x00,
 0x00,
 0x00,
 0x00,
 0x00,
 0x00,
 0x00,
 0x00,
 0x00,
 0x00,
 0x00,
 0x00,
 0x00,
 0x00,
 0x00,
 >>> exit()









![数据结构(邓俊辉)学习笔记】串 05——KMP算法:理解next[]表](https://i-blog.csdnimg.cn/direct/7e83659b46054e22a29616a9cf6806e7.png)









