c ++ visual studio 2017 чтение размера png через данные заголовка - PullRequest
0 голосов
/ 22 ноября 2018

Здравствуйте, у меня есть проблема, чтобы прочитать правильные данные размера png dimesnion

unsigned  width = 0;
unsigned  height = 0;
bool output_json = false;
std::ifstream in(filepath, std::ios_base::binary | std::ios_base::in);
if (in.is_open())
{
    in.seekg(16, std::ios_base::cur);
    in.read((char *)&width, 4);
    in.read((char *)&height, 4);

    _byteswap_uint64(width);
    _byteswap_uint64(height);

    output_json = true;
    in.close();
}

ширина должна быть 155, но вывести 2600468480 высота должна быть 80, но вывести 1342177280

1 Ответ

0 голосов
/ 22 ноября 2018

ширина должна быть 155, но вывести 2600468480, высота должна быть 80, но вывести 1342177280

Существует проблема с порядком байтов.

2600468480 находится вв десятичной форме 9b000000;155 - это 9b.

Таким образом, порядок младших / старших байтов переключается.

Попробуйте поменять местами байты

unsigned  w0;

in.read((char *)&w0, 4);

width = ((w0 >> 24) & 0xff) |
        ((w0 << 8) & 0xff0000) |
        ((w0 >> 8) & 0xff00) |
        ((w0 << 24) & 0xff000000); 
...