试图获取BMP
文件的有效大小。
当然最好的方法就是获取Length
加载流的属性。
但是BMP
标头格式确实包含有关其大小的信息,我想尝试从 BMP 标头中完全获取它。
来自 Wiki 或其他来源:
http://en.wikipedia.org/wiki/BMP_file_format
offset: 0002h | 4 bytes | the size of the BMP file in bytes
因此大小值包含在BMP
4 字节区域的标头中( from [2] -> [5]: 2, 3, 4, 5
)
所以首先我想得到所有的字节值并对所有的求和:
1)。
int BMPGetFileSize(ref byte[] headerPart)
{
int fileSize = 0;
for (int i = 0; i < headerPart.Length; i++)
{
fileSize += headerPart[i];
}
return (fileSize > 0) ? fileSize : -1;
}
我有一个非常小的尺寸......对于我的文件,实际大小是 901:
但是,我从代码中得到:84。
我检查了正确的区域,我认为我不能得到正确的值,但我得到了正确的(从 BMP 的 byte[] 数据的第 2 到第 5 )。
2)。然后我想,我不能对它们求和,而只是在一个字符串行中写入所有值,然后将其转换为 System.Int32 并除以 1024 以获得以 Kbytes 为单位的大小,但再次......它没有等于901 Kb
价值。
watch
您可能会认为,当您查看对话框并将其与函数代码进行比较时,我混淆了该区域并选择了错误的值,但是正如您所见,函数中的 byte[] 数组是: headerPart
,不是data
,所以我没有混淆任何东西, data[] 是整个 BMP 文件的文件流。
那么,如何从 BMP 标头而不是 C# 中的流属性获取文件大小?