我正在尝试读取 PNG 文件的宽度和高度。这是我的代码:
struct TImageSize {
    int width;
    int height;
};
bool getPngSize(const char *fileName, TImageSize &is) {
    std::ifstream file(fileName, std::ios_base::binary | std::ios_base::in);
    if (!file.is_open() || !file) {
        file.close();
        return false;
    }
    // Skip PNG file signature
    file.seekg(9, std::ios_base::cur);
    // First chunk: IHDR image header
    // Skip Chunk Length
    file.seekg(4, std::ios_base::cur);
    // Skip Chunk Type
    file.seekg(4, std::ios_base::cur);
    __int32 width, height;
    file.read((char*)&width, 4);
    file.read((char*)&height, 4);
    std::cout << file.tellg();
    is.width = width;
    is.height = height;
    file.close();
    return true;
}
例如,如果我尝试从 Wikipedia 的这张图片中阅读,我会得到这些错误的值:
252097920(应为800)
139985408(应为600)
请注意,该函数不会返回 false,因此宽度和高度变量的内容必须来自文件。