将文件以指定格式存储~BMP~C的实现~FAT32格式

2024-01-25 06:36

本文主要是介绍将文件以指定格式存储~BMP~C的实现~FAT32格式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考:

BMP文件学习笔记(一): C/C++语言实现.bmp文件读写_c++ 写入bmp-CSDN博客

U盘到底用什么格式好?FAT32、NTFS还是exFAT? - 知乎 (zhihu.com)

第一部分:

位图文件头

BITMAPFILEHEADER,是一个结构。这个结构的长度是固定的,为14个字节

        (WORD为无符号16位整数,DWORD为无符号32位整数)。

其定义如下:

typedef struct tagBITMAPFILEHEADER {
WORD           bfType;
//位图文件类型,必须是0x4D42,即字符串“BM”,也就是说所有.bmp文件的头两个字节都是“BM”
DWORD          bfSize;//位图文件大小,包括这14个字节
WORD           bfReserved1;//保留字,设为0
WORD           bfReserved2;//保留字,设为0
DWORD        bfOffBits;//从文件头到实际的位图数据的偏移字节数,单位:字节
} BITMAPFILEHEADER;WORD           bfType;//4D42 = BM
DWORD          bfSize;//1920x1080x3+16=5E EC 36
WORD           bfReserved1;//保留字,设为0
WORD           bfReserved2;//保留字,设为0
DWORD          bfOffBits;  //从文件头到实际的位图数据的偏移字节数,单位:字节//Head_Length = 54 byte = 36 hex 

第二部分:

位图信息头

BITMAPINFOHEADER,

是一个结构。这个结构的长度也是固定的,为40个字节(LONG为32位整数)。

其定义如下:

typedef struct tagBITMAPINFOHEADER{
DWORD        biSize;//本结构所占用字节数,大小为40字节
LONG         biWidth;//位图宽度,单位:字节
LONG         biHeight;//位图高度,单位:字节
WORD         biPlanes;//目标设备级别,必须为1
WORD         biBitCount;
//表示颜色时每个像素要用到的位数,常用的值为1(黑白二色图), 4(16色图), 8(256色), 24(真彩色图)
DWORD        biCompression;
// 位图是否压缩,其类型是 0(BI_RGB不压缩),  1(BI_RLE8压缩类型)或2(BI_RLE4压缩类型)
DWORD        biSizeImage;//实际的位图数据占用的字节数
LONG         biXPelsPerMeter;//位图水平分辨率,每米像素数
LONG         biYPelsPerMeter;//位图垂直分辨率,每米像素数
DWORD        biClrUsed;
//指定本图象实际用到的颜色数,如果该值为零,则用到的颜色数为2的biBitCount次幂个
DWORD        biClrImportant;//指定本图象中重要的颜色数,如果该值为零,则认为所有的颜色都是重要的
} BITMAPINFOHEADER;

FatFs - Generic FAT Filesystem Module (elm-chan.org)

 f_mount

FRESULT f_mount (FATFS*       fs,    /* [IN] Filesystem object */const TCHAR* path,  /* [IN] Logical drive number */BYTE         opt    /* [IN] Initialization option */
);

参数

fs:文件系统的对象指针

Pointer to the filesystem object to be registered and cleared. Null pointer unregisters the registered filesystem object.

指向要注册和清除的文件系统对象的指针。空指针取消注册已注册的文件系统对象。

path:逻辑分区的标号,一般是0

Pointer to the null-terminated string that specifies the logical drive. The string without drive number means the default drive.

指向指定逻辑驱动器的以 null 结尾的字符串的指针。不带驱动器号的字符串表示默认驱动器。

opt

Mounting option.

0: Do not mount now (to be mounted on the first access to the volume),

1: Force mounted the volume to check if it is ready to work.

0:现在不安装(将在第一次访问卷时挂载),

1:强制挂载以检查它是否准备好工作。

f_open 

FRESULT f_open (FIL* fp,           /* [OUT] Pointer to the file object structure */const TCHAR* path, /* [IN] File name */BYTE mode          /* [IN] Mode flags */
);

fp

Pointer to the blank file object structure.

指向空白文件对象结构的指针。

path

Pointer to the null-terminated string that specifies the file name to open or create.

指向以 null 结尾的字符串的指针,该字符串指定要打开或创建的文件名。

mode

Mode flags that specifies the type of access and open method for the file. It is specified by a combination of following flags.

指定文件的访问类型和打开方法的模式标志。它由以下标志的组合指定。

FlagsMeaning
FA_READSpecifies read access to the file. Data can be read from the file.
FA_WRITESpecifies write access to the file. Data can be written to the file. Combine with FA_READ for read-write access.
FA_OPEN_EXISTINGOpens a file. The function fails if the file is not existing. (Default)
FA_CREATE_NEWCreates a new file. The function fails with FR_EXIST if the file is existing.
FA_CREATE_ALWAYSCreates a new file. If the file is existing, it will be truncated and overwritten.
FA_OPEN_ALWAYSOpens the file if it is existing. If not, a new file will be created.
FA_OPEN_APPENDSame as FA_OPEN_ALWAYS except the read/write pointer is set end of the file.
POSIXFatFs
"r"FA_READ
"r+"FA_READ | FA_WRITE
"w"FA_CREATE_ALWAYS | FA_WRITE
"w+"FA_CREATE_ALWAYS | FA_WRITE | FA_READ
"a"FA_OPEN_APPEND | FA_WRITE
"a+"FA_OPEN_APPEND | FA_WRITE | FA_READ
"wx"FA_CREATE_NEW | FA_WRITE
"w+x"FA_CREATE_NEW | FA_WRITE | FA_READ

f_lseek:移动指针

FRESULT f_lseek (FIL*    fp,  /* [IN] File object */FSIZE_t ofs  /* [IN] Offset of file read/write pointer to be set */
);

fp

Pointer to the open file object.

指向打开的文件对象的指针。

ofs

Byte offset from top of the file to set read/write pointer. The data type FSIZE_t is an alias of either DWORD(32-bit) or QWORD(64-bit) depends on the configuration option FF_FS_EXFAT.

ofs 从文件顶部开始的字节偏移量,用于设置读/写指针。

数据类型 FSIZE_t 是 DWORD(32 位)或 QWORD(64 位)的别名,

具体取决于配置选项 FF_FS_EXFAT。

/* Open file */fp = malloc(sizeof (FIL));res = f_open(fp, "file.dat", FA_READ|FA_WRITE);if (res) .../* Set read/write pointer to 5000 */res = f_lseek(fp, 5000);/* Set read/write pointer to end of the file to append data */res = f_lseek(fp, f_size(fp));/* Advance read/write pointer 3000 bytes */res = f_lseek(fp, f_tell(fp) + 3000);/* Rewind read/write pointer 2000 bytes (take care on wraparound) */res = f_lseek(fp, f_tell(fp) - 2000);

f_write

FRESULT f_write (FIL* fp,          /* [IN] Pointer to the file object structure */const void* buff, /* [IN] Pointer to the data to be written */UINT btw,         /* [IN] Number of bytes to write */UINT* bw          /* [OUT] Pointer to the variable to return number of bytes written */
);

fp

Pointer to the open file object structure.

指向打开文件对象结构的指针。

buff

Pointer to the data to be written.

指向要写入的数据的指针。

btw:希望写入的字节数量

Specifies number of bytes to write in range of UINT type. If the data needs to be written fast, it should be written in large chunk as possible.

指定在 UINT 类型范围内写入的字节数。如果需要快速写入数据,则应尽可能以大块的形式写入。

bw:指向变量的指针,返回写入的字节数

Pointer to the UINT variable that receives the number of bytes written. This value is always valid after the function call regardless of the function return code. If the return value is equal to btw, the function return code should be FR_OK.

指向接收写入字节数的 UINT 变量的指针。无论函数返回码如何,该值在函数调用后始终有效。如果返回值等于btw,则函数返回码应为FR_OK。

f_sync

f_sync 函数刷新写入文件的缓存信息。

FRESULT f_sync (FIL* fp     /* [IN] File object */
);

f_close

FRESULT f_close (FIL* fp     /* [IN] Pointer to the file object */
);

这篇关于将文件以指定格式存储~BMP~C的实现~FAT32格式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/642388

相关文章

C++中零拷贝的多种实现方式

《C++中零拷贝的多种实现方式》本文主要介绍了C++中零拷贝的实现示例,旨在在减少数据在内存中的不必要复制,从而提高程序性能、降低内存使用并减少CPU消耗,零拷贝技术通过多种方式实现,下面就来了解一下... 目录一、C++中零拷贝技术的核心概念二、std::string_view 简介三、std::stri

C++高效内存池实现减少动态分配开销的解决方案

《C++高效内存池实现减少动态分配开销的解决方案》C++动态内存分配存在系统调用开销、碎片化和锁竞争等性能问题,内存池通过预分配、分块管理和缓存复用解决这些问题,下面就来了解一下... 目录一、C++内存分配的性能挑战二、内存池技术的核心原理三、主流内存池实现:TCMalloc与Jemalloc1. TCM

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

Python pip下载包及所有依赖到指定文件夹的步骤说明

《Pythonpip下载包及所有依赖到指定文件夹的步骤说明》为了方便开发和部署,我们常常需要将Python项目所依赖的第三方包导出到本地文件夹中,:本文主要介绍Pythonpip下载包及所有依... 目录步骤说明命令格式示例参数说明离线安装方法注意事项总结要使用pip下载包及其所有依赖到指定文件夹,请按照以

Python实现精准提取 PDF中的文本,表格与图片

《Python实现精准提取PDF中的文本,表格与图片》在实际的系统开发中,处理PDF文件不仅限于读取整页文本,还有提取文档中的表格数据,图片或特定区域的内容,下面我们来看看如何使用Python实... 目录安装 python 库提取 PDF 文本内容:获取整页文本与指定区域内容获取页面上的所有文本内容获取

基于Python实现一个Windows Tree命令工具

《基于Python实现一个WindowsTree命令工具》今天想要在Windows平台的CMD命令终端窗口中使用像Linux下的tree命令,打印一下目录结构层级树,然而还真有tree命令,但是发现... 目录引言实现代码使用说明可用选项示例用法功能特点添加到环境变量方法一:创建批处理文件并添加到PATH1

Java使用HttpClient实现图片下载与本地保存功能

《Java使用HttpClient实现图片下载与本地保存功能》在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都... 目录引言一、Apache HttpClient简介二、技术栈与环境准备三、实现图片下载与保存功能1.

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

Nexus安装和启动的实现教程

《Nexus安装和启动的实现教程》:本文主要介绍Nexus安装和启动的实现教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Nexus下载二、Nexus安装和启动三、关闭Nexus总结一、Nexus下载官方下载链接:DownloadWindows系统根