Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Как купить рекламу на форуме


Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме 40000 рублей в месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2011, 20:59   #1
zver777
Пользователь
 
Регистрация: 31.07.2009
Сообщений: 89
По умолчанию Узнать разрешение png картинки

Необходимо узнать разрешение картинки не используя спец. библиотеки.

Есть допустим картинка


Её разрешение 1000х1000.
В hex редакторе выглядит так:


В первом чёрном прямоугольнике выделены 4 байта в которых хрянится ширина, во втором высота.

Пытаюсь считать эти данные таким образом
Код:
var
stream:TFileStream;
k:integer;
begin
stream:=TFileStream.Create(Filename, fmOpenRead and fmShareDenyNone);
stream.Seek(16,soFromBeginning);
stream.read(k, 4);
ShowMessage(IntToStr(k));
end;
Но в результате выводится какое-то левое число.
Подскажите как правильно получить число из этих 4 байт.
Изображения
Тип файла: jpg 111.jpg (19.2 Кб, 186 просмотров)
Тип файла: png 22.png (3.0 Кб, 140 просмотров)
zver777 вне форума Ответить с цитированием
Старый 02.11.2011, 21:47   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,061
По умолчанию

Когда таким образом читаешь в Integer получишь: e8030000, в байтовом виде Б1Б2Б3Б4 перейдет в Б4Б3Б2Б1. В данном случае разрешение 1000x1000 и читать нужно по-байтно и собирать в Integer умножая на соответствующие коэффициенты
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 02.11.2011, 21:48   #3
zver777
Пользователь
 
Регистрация: 31.07.2009
Сообщений: 89
По умолчанию

Хорошо.
Прочитал я в массив из 4 байт.
Как мне из них собрать integer? На какие коэффициенты умножать?
zver777 вне форума Ответить с цитированием
Старый 02.11.2011, 21:54   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,061
По умолчанию

4-ый не умножать
3-ий на 256
2-ий на 256*256
1-ий на 256*256*256
все сложить
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 02.11.2011, 21:55   #5
zver777
Пользователь
 
Регистрация: 31.07.2009
Сообщений: 89
По умолчанию

Огромное спасибо!
zver777 вне форума Ответить с цитированием
Старый 02.11.2011, 22:37   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Вот простой и универсальный вариант для работы с пинг-картинками...
1. Грузим и устанавливаем компонент TPNGImage;
http://delphidevelop.ru/publ/12-1-0-174
2. Загружаем нужную нам пинг-картинку в TImage; (с установленным свойством AutoSize=True)
3. Смотрим Height и Width нашей картинки...

З.Ы. Зачем лезть в байты ??? Завтра кто-нибудь сделает модифицированный PNG - и что вы будете делать со своими байтами ?
mihali4 вне форума Ответить с цитированием
Старый 02.11.2011, 23:00   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,061
По умолчанию

В байты и правда лазить нечего. Насчет модифицированного PNG - а поможет ли тогда TPNGImage? Сомневаюсь
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 02.11.2011, 23:07   #8
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Насчет модифицированного PNG - а поможет ли тогда TPNGImage? Сомневаюсь
А ему "по барабану" не "очень резкие" изменения формата, как я понял из исходника...
mihali4 вне форума Ответить с цитированием
Старый 04.11.2011, 20:49   #9
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Вот простой и универсальный вариант для работы с пинг-картинками...
1. Грузим и устанавливаем компонент TPNGImage;
http://delphidevelop.ru/publ/12-1-0-174
2. Загружаем нужную нам пинг-картинку в TImage; (с установленным свойством AutoSize=True)
3. Смотрим Height и Width нашей картинки...

З.Ы. Зачем лезть в байты ??? Завтра кто-нибудь сделает модифицированный PNG - и что вы будете делать со своими байтами ?
А может и не стоит комопнент устанавливать. Есть стандартный объект для работы с такими картинками. Создаёте объект так же как и TBitmap и работаете с ним. Только вот позабыл как это называется вроде TPNGObject. Делфи под рукой нет проверить не могу
SERG1980 вне форума Ответить с цитированием
Старый 05.11.2011, 22:56   #10
antonn
Пользователь
 
Регистрация: 17.05.2011
Сообщений: 24
По умолчанию

например, в D7 такого "стандартного" нет
antonn вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменить разрешение картинки free6878 Помощь студентам 3 17.01.2011 19:01
Можно ли узнать разрешение посетителей сайта? batusai PHP 3 19.11.2010 09:16
png картинки в Delphi 10 Marsel737 Общие вопросы Delphi 8 07.05.2010 21:03
Где узнать текущее разрешение экрана? Teksa Помощь студентам 2 07.09.2007 16:19