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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Justix
73 / 19 / 1
Регистрация: 26.04.2012
Сообщений: 233
#1

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

08.01.2013, 22:46. Просмотров 1057. Ответов 15
Метки нет (Все метки)

Здравствуйте,форумчане)
Пытаюсь прочитать 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 (C++):

Заменить считывание с клавиатуры на считывание из файла - C++
Помогите пожалуйста, ни разу не работал со считыванием из файла поэтому не понимаю как и что делать. Почитал в интернете, попробовал, не...

Read PNG in C - C++
Всем привет. Подскажите как на С (без привлечения сторонних библиотек) прочитать PNG файл. В конечном итоге хотелось бы получить...

Чтение PNG файла - C++
описал структуру заголовка чанка struct _PNG_ChunkHead { unsigned int _length; char _type; }; после чтения чанка IHDR...

Конвектор png в jpg - C++
Хочу написать прогу для конвертирования png формата изображения в jpg формат изображения. Можете объяснить как это реализуется, дать ссылки...

Генерация PNG (проблема) - C++
//test3.cpp //---------------------------------------------------------- // #pragma pack(1) #include <stdio.h> #include...

Объединение нескольких png файлов в один png-файл - C++
В общем надо написать програмулину, которая объединяет несколько png файлов (ширина и высота одинаковы у изображений) в один png-файл. ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
NoMasters
Псевдослучайный
1753 / 1096 / 72
Регистрация: 13.09.2011
Сообщений: 3,127
08.01.2013, 22:53 #2
big endian же. Кстати, вы уверены, что int — это всегда четыре байта?

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

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

ActiveX для просмотра PNG - C++
Подскажите, где можно взять ActiveX для просмотра PNG?

Вставить картинку png (Glut) С++ - C++
Вообщем написал змейку с помощью glut. Все работает прекрасно. Решил заменить квадраты (которые ест змейка) на картинки яблок. Начал...

Спрятать сообщение в png файл - C++
Работал с BMP файлом - там всё просто. Но с png возникли трудности - формат сжатый, а именно zlib. Что делать? Как спрятать текст в png...

Вывод png изображения на экран - C++
Здравствуйте уважаемые программисты! Подскажите как вывести png изображение на экран. Потом еще нужно будет вращать его на произвольный...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
09.01.2013, 13:16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru