Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
73 / 19 / 0
Регистрация: 26.04.2012
Сообщений: 233
1

Считывание PNG

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

Author24 — интернет-сервис помощи студентам
Здравствуйте,форумчане)
Пытаюсь прочитать 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 минут
Помогите пожалуйста...срочно нужно...(
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.01.2013, 22:46
Ответы с готовыми решениями:

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

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

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

Вращение TImage c PNG. Нужна переделка решения для BMP под PNG
Здравствуйте. Очень нужна помощь с вращением. Есть решение данной проблемы для формата bmp :...

15
Псевдослучайный
1946 / 1145 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
08.01.2013, 22:53 2
big endian же. Кстати, вы уверены, что int — это всегда четыре байта?

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

Добавлено через 24 минуты
Блин,считал вроде,а там выводится не изображение, а фиг пойми что((
Это может быть связано с сжатием изображения в формате?
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
09.01.2013, 00:30 10
да запросто. вы инфу расжимали? нет? тогда результат закономерен. возвращайтесь к посту #2
0
73 / 19 / 0
Регистрация: 26.04.2012
Сообщений: 233
09.01.2013, 00:41  [ТС] 11
А вот и не пойду я за библиотекой,нашёл про алгоритм сжатия,ещё пол ночи осталось,надеюсь напишу декодирование)
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
09.01.2013, 00:49 12
это если в png используется тот же алгоримт. а если другой? а если разные и параметры алгоритма в хидере записаны. врятли нормый декодер получится за пол ночи сделать. может даже и недели не хватит при отсутствии необходимого опыта. вот есть либа libpng и чтобы ее заюзать, мне там копаться пришлось, а она заточена под это дело. ну в общем дерзайте.
0
73 / 19 / 0
Регистрация: 26.04.2012
Сообщений: 233
09.01.2013, 03:06  [ТС] 13
Да я короче забил,и написал шейдер, который кое какой цвет принимает за полностью прозрачный)
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
09.01.2013, 10:49 14
Цитата Сообщение от Justix Посмотреть сообщение
а зачем мне целая библиотека для этого?я не сторонник библиотек,я не настолько крутой программист ,чтобы ими пользоваться
Определись: или не настолько крутой, или чтоб ими пользоваться.
0
545 / 344 / 12
Регистрация: 05.11.2010
Сообщений: 1,076
Записей в блоге: 1
09.01.2013, 13:16 15
ntohl()
Офигенный подход - для чтения png подключать winsock и пользоваться его функциями, которые даже расшифровываются как "net|host to host|net short|long", что намекает нам на их предназначенность к использованию при сетевом взаимодействии.
0
Псевдослучайный
1946 / 1145 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
09.01.2013, 13:34 16
Цитата Сообщение от Герц Посмотреть сообщение
для чтения png подключать winsock
Я уже написал, что в нормальных системах эта функция включена в libc. И как бы она делает ровно то, что нужно: переводит из стандартного сетевого порядка, которым и является big endian, в хостовый, каким бы он не был.
0
09.01.2013, 13:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.01.2013, 13:34
Помогаю со студенческими работами здесь

Какое расширение выбрать JPG/GIF/PNG-8/PNG-24
Применение их

Close.png не была загружена, потому что её MIME-тип («image/png») не «text/css»
Вот такую получаю ошибку Таблица стилей http://localhost:8080/temp/images/close.png не была...

PNG анимация из одного и нескольких PNG-файлов
Доброго времени суток! До начала изучения языка программирования, я увлекался созданием игр через...

Открытие страницы fon.png.php вместо файла fon.png
видел сайт где на все файлы(например fon.png) стоят файлы-страницы(например fon.png.php), в итоге,...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru