You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C++读取并比较JPEG文件单个字节以获取图像尺寸

读取JPEG文件特定字节并获取像素尺寸的C++实现

没问题,我来帮你搞定这个需求!要定位JPEG里的目标字节并提取像素尺寸,咱们可以按照以下思路来实现:

核心思路

JPEG文件的结构以一系列FF开头的标记段组成,你需要先找到目标FF字节,再往后偏移5个位置读取存储像素尺寸的字节(通常JPEG的宽高是两个连续的大端字节)。

完整C++代码示例

#include <iostream>
#include <fstream>
#include <cstdint>

using namespace std;

int main() {
    // 替换成你的JPEG文件路径
    const string jpeg_path = "your_image.jpg";
    ifstream file(jpeg_path, ios::binary);
    
    if (!file.is_open()) {
        cerr << "无法打开文件!" << endl;
        return 1;
    }

    uint8_t current_byte;
    bool found_ff = false;
    int offset_count = 0;

    while (file.read(reinterpret_cast<char*>(&current_byte), sizeof(current_byte))) {
        if (found_ff) {
            offset_count++;
            // 找到FF后第5个字节,开始读取尺寸(假设尺寸是2字节大端)
            if (offset_count == 5) {
                uint8_t size_byte1, size_byte2;
                // 读取两个字节的尺寸(宽或高,根据你的实际需求调整)
                if (file.read(reinterpret_cast<char*>(&size_byte1), sizeof(size_byte1)) &&
                    file.read(reinterpret_cast<char*>(&size_byte2), sizeof(size_byte2))) {
                    // JPEG用大端存储,转换为主机字节序
                    uint16_t dimension = (static_cast<uint16_t>(size_byte1) << 8) | size_byte2;
                    cout << "获取到的像素尺寸:" << dimension << endl;
                } else {
                    cerr << "文件读取到末尾,无法获取尺寸!" << endl;
                }
                // 找到目标后可以退出循环,或者继续处理其他内容
                break;
            }
        } else {
            // 检查当前字节是否是目标FF
            if (current_byte == 0xFF) {
                found_ff = true;
            }
        }
    }

    file.close();
    return 0;
}

关键部分解释

  • 二进制文件打开:必须指定ios::binary模式,否则文本模式会自动转换换行符,破坏二进制数据的完整性。
  • 单个字节读取与比较:用uint8_t存储读取的字节(避免符号问题),直接用== 0xFF就能和目标值比较,非常直观。
  • 大端字节序转换:JPEG的元数据(包括尺寸)采用大端字节序存储,所以需要把高字节左移8位,再和低字节做按位或操作,转换为本地主机的字节序。
  • 异常处理:加入了文件打开失败、读取到末尾的判断,避免程序崩溃。

注意事项

  • 如果你的目标FF是某个特定标记(比如SOF0标记FFC0),建议在找到FF后再检查下一个字节,确保是你要的标记段,避免误判其他FF字节。
  • 测试时可以先用十六进制编辑器确认目标字节的位置,验证代码的准确性。

内容的提问来源于stack exchange,提问作者luco5826

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:23:42