Форум программистов, компьютерный форум CyberForum.ru

Считывание PNG - C++

Восстановить пароль Регистрация
 
Justix
 Аватар для Justix
73 / 19 / 1
Регистрация: 26.04.2012
Сообщений: 233
08.01.2013, 22:46     Считывание PNG #1
Здравствуйте,форумчане)
Пытаюсь прочитать PNG файл,вообще убейте не понимаю почему не работает.Даже длину и ширину нормально не считывает.
Кусок кода
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
   file = fopen(Name, "rb");
       if(file == NULL)
       {
        //MessageBox(NULL, 0, L"Ne ydalos onkrit file!", MB_OK); 
        exit(1);
   }; 
     
fseek(file, 12, SEEK_SET); 
    fread(&q[0],1,1,file);//char
    fread(&q[1],1,1,file);//char
    fread(&q[2],1,1,file);//char
    fread(&q[3],1,1,file);//char
    fread(&width,sizeof(int),1,file);//int
    fread(&height,sizeof(int),1,file);//int
    fread(&depth,1,1,file);//char
в массив q для проверки что вообще что считывается правильно считал тип чанка iHDR,вроде считался)
а вот дальше...размеры пнг 32x32,в данных весит
width = 536870912 height = 536870912 depth = -52 'М'
А должно быть 32,32,8...
Что не так?

Добавлено через 21 минуту
ап ап ап

Добавлено через 37 минут
Помогите пожалуйста...срочно нужно...(
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.01.2013, 22:46     Считывание PNG
Посмотрите здесь:

Генерация PNG (проблема) C++
Read PNG in C C++
C++ Конвектор png в jpg
C++ ActiveX для просмотра PNG
C++ Вывод png изображения на экран
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
08.01.2013, 22:53     Считывание PNG #2
big endian же. Кстати, вы уверены, что int — это всегда четыре байта?

Добавлено через 35 секунд
Вообще, зачем этот велосипед, вам не хватает библиотек для загрузки?
Justix
 Аватар для Justix
73 / 19 / 1
Регистрация: 26.04.2012
Сообщений: 233
08.01.2013, 22:57  [ТС]     Считывание PNG #3
big endian же .... -что простите?
не уверен,но 32 битной системы должен быть)
а зачем мне целая библиотека для этого?я не сторонник библиотек,я не настолько крутой программист ,чтобы ими пользоваться ,в том плане что надо знать азы(имхо)
Не переходим от темы...Я ставил просто число 4 а не сайзоф(инт),всё равно
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
08.01.2013, 23:08     Считывание PNG #4
Цитата Сообщение от Justix Посмотреть сообщение
что простите?
Порядок байт другой, в x86 для внутреннего представления чисел используется little endian, то есть порядок от младшего к старшему, а вот в PNG наоборот(да и много где ещё, это вообще практически стандарт для передачи/хранения данных). Соответственно, просто считать недостаточно, ещё и порядок надо поменять.
Цитата Сообщение от Justix Посмотреть сообщение
а зачем мне целая библиотека для этого?я не сторонник библиотек
А зачем тебе велосипед, который делает ровно тоже самое?
Цитата Сообщение от Justix Посмотреть сообщение
Я ставил просто число 4
А тип переменной-то небойсь не поправил...
Justix
 Аватар для Justix
73 / 19 / 1
Регистрация: 26.04.2012
Сообщений: 233
08.01.2013, 23:15  [ТС]     Считывание PNG #5
А как поменять порядок?
Затем что я буду знать как он работает,ибо сам написал.
А на какой менять-то,флота вроде 4 байта,но там тоже билебирда
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
08.01.2013, 23:23     Считывание PNG #6
ntohl()
Цитата Сообщение от Justix Посмотреть сообщение
Затем что я буду знать как он работает,ибо сам написал.
Знать формат заголовка и функцию декодирования? Малополезное знание ИМХО.
Цитата Сообщение от Justix Посмотреть сообщение
на какой менять-то
На тип фиксированной длины, очевидно. int32_t
Justix
 Аватар для Justix
73 / 19 / 1
Регистрация: 26.04.2012
Сообщений: 233
08.01.2013, 23:36  [ТС]     Считывание PNG #7
С функцией ошибку выдаёт линкования,не подскажите какую либу использует,чтобы в pragma comment запихнуть?)
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
08.01.2013, 23:51     Считывание PNG #8
Гугл для виндов рекомендует ws2_32.lib, хотя в уважающих себя системах оно прямо в libc...
Justix
 Аватар для Justix
73 / 19 / 1
Регистрация: 26.04.2012
Сообщений: 233
09.01.2013, 00:25  [ТС]     Считывание PNG #9
О даааааааааааааааааа!!!!!!!!!!!!!!!!!!!!Спасибо вам большое!!!!))))

Добавлено через 24 минуты
Блин,считал вроде,а там выводится не изображение, а фиг пойми что((
Это может быть связано с сжатием изображения в формате?
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
09.01.2013, 00:30     Считывание PNG #10
да запросто. вы инфу расжимали? нет? тогда результат закономерен. возвращайтесь к посту #2
Justix
 Аватар для Justix
73 / 19 / 1
Регистрация: 26.04.2012
Сообщений: 233
09.01.2013, 00:41  [ТС]     Считывание PNG #11
А вот и не пойду я за библиотекой,нашёл про алгоритм сжатия,ещё пол ночи осталось,надеюсь напишу декодирование)
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
09.01.2013, 00:49     Считывание PNG #12
это если в png используется тот же алгоримт. а если другой? а если разные и параметры алгоритма в хидере записаны. врятли нормый декодер получится за пол ночи сделать. может даже и недели не хватит при отсутствии необходимого опыта. вот есть либа libpng и чтобы ее заюзать, мне там копаться пришлось, а она заточена под это дело. ну в общем дерзайте.
Justix
 Аватар для Justix
73 / 19 / 1
Регистрация: 26.04.2012
Сообщений: 233
09.01.2013, 03:06  [ТС]     Считывание PNG #13
Да я короче забил,и написал шейдер, который кое какой цвет принимает за полностью прозрачный)
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
09.01.2013, 10:49     Считывание PNG #14
Цитата Сообщение от Justix Посмотреть сообщение
а зачем мне целая библиотека для этого?я не сторонник библиотек,я не настолько крутой программист ,чтобы ими пользоваться
Определись: или не настолько крутой, или чтоб ими пользоваться.
Герц
523 / 340 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
09.01.2013, 13:16     Считывание PNG #15
ntohl()
Офигенный подход - для чтения png подключать winsock и пользоваться его функциями, которые даже расшифровываются как "net|host to host|net short|long", что намекает нам на их предназначенность к использованию при сетевом взаимодействии.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.01.2013, 13:34     Считывание PNG
Еще ссылки по теме:

Спрятать сообщение в png файл C++
Нужно сохранить результат в png, a не в bmp C++
Чтение PNG файла C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
09.01.2013, 13:34     Считывание PNG #16
Цитата Сообщение от Герц Посмотреть сообщение
для чтения png подключать winsock
Я уже написал, что в нормальных системах эта функция включена в libc. И как бы она делает ровно то, что нужно: переводит из стандартного сетевого порядка, которым и является big endian, в хостовый, каким бы он не был.
Yandex
Объявления
09.01.2013, 13:34     Считывание PNG
Ответ Создать тему
Опции темы

Текущее время: 20:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru