Флудильня 3.0
20 ноября 2013, 09:58
[ссылка]
Soulskinner, я сейчас программой на делфи занялся, ради интереса. Изучил краем глаза несколько форматов (архивы, картинки).
Игровая графика (особенно старых игр) и квадратики в JPG -- отдельная тема. Но об игровой графике уже хорошо писал в своем рассказе про HL, нужно продолжение темы, сюда http://ficbook.net/readfic/1166983
Отмечу, что популярные форматы картинок, вроде JPG, BMP, GIF никогда палитру в себе не хранили. Их показ зависел от вьювера, который обычно обращается к палитре видеодрайвера через стандартные возможности Windows. Учитывая, что в 90-е были разные мониторы, типа VGA, EGA, одна и та же картинка могла выглядеть совершенно по другому. Старые игры хранили низкокачественную палитру для ускорения, чтобы не обращаться по каждой картинке к возможностям DOS или Windows. В DOS еще однозадачность была, запуск нескольких программ невозможен. Современные игры и нынешние форматы файлов этого (хранение палитры) не делают, когда есть драйвера.
HL палитру хранит, но не в отдельном файле для всех картинок как Quake, а создает новую для каждого файла (ВАДы, модели, спрайты). Если какого-то монстра нет на карте, скажем, то он понятно не загружается.
Для создания формата прежде всего нужен заголовок.
Файлы различаются не по расширению (посмотрите на движки idtech хотя бы, zip'ы с другими расширениями), а по заголовкам (ибо расширение может быть любым, но файл также его может и не иметь). Так что все форматы файлов сначала читают заголовок.
Далее. У нас графический файл, мы можем сразу вжучить информацию о разрешении и цвете, но если не знаем как цвет будет обрабатываться, мы вьювер не напишем (а собственный формат, значит и собственный вьювер). Сначала нужна палитра. Лучше всего обратиться к палитре видеодрайвера, посредством какого-нибудь WinAPI, но можно использовать возможности MS-DOS, которые из 7 винды, к слову, не удаляли. Но тут у нас будет всего 16 цветов, зато проще сделать вьювер и формат в целом.
Хранение цвета. Знаете, сколько "по умолчанию" занимает цветовая информация? Белый кодируется как FFFFFFF, оттенки серого от нуля до фффф. И это только градация серого, а вам скорее всего нужен цветной файл. Но известные форматы картинок так информацию на хранят. Пара красный-синий-зеленый представлена как два байта вида F2 23 D0. Это уже три цвета в двух байтах. Как сделано? Использование таблиц замен, которые надо расшифровывать (у них в спецификации куча настроек типа размера словаря и так далее). Почему загрузка больших картинок тормозит, как вообще может тормозить например 50МБ файл на двухядерных процессорах и порядка 4ГБ оперативной памяти? А вы знаете, сколько информации нужно расшифровать вьюверу впринципе, плюс учитывайте зарезервированную память для системы.
PNG например, использует LZW. Тот же алгоритм, что и архиватора 7зип, используемый в основном в unix. По сути, без этого ни один современный формат картинок не обходиться.
Помните про заголовки в начале? А что если ваш формат файла предусматривает несколько таблиц замен разных разработчиков (к примеру, вьювер расшифровывает и PK (зиповский заголовок) и LZW). Значит нужен второй заголовок, который определяет алгоритм паковки в этом файле и определяет дальнейший принцип работы вьювера, отдельного редактора или плагина к фотошопу. Иначе пользователю, в лучшем случае, придется задавать это самому. А что обычному человеку до того, этот PNG LZWшный или использует другой алгоритм паковки цветовых байтов?
Файлы принято разделять на строгие (поддерживают только один алгоритм) и со свободной спецификацией (гуляют несколько алгоритмов паковки, что для простого юзера просто одни и те же PNG, JPG). Из тех, которые читаются браузером (а значит известны всем), почти все форматы свободные, кроме SVG. Кстати, SVG информацию вообще не шифрует, цвет и вектор представлены в открытом виде.
В идеале программа, я считаю, файлы должна читать независимо от расширения, ориентируясь на заголовки. Но на практике, проще всего реализовать программу, где проверка идет по расширению, да и файлы JPG без расширения или с другим, практически не встречаются. В MS-DOS расширением файла программе (а тогда они в основном консольные) передавали заголовок, который сейчас является содержанием файлов. Там когда-то не было заголовков, только байты. Если мы диалоговое окно возьмем (просмотр папок после нажатия кнопки "Обзор"), то оно проверяет по расширению. А можно написать окно, которое будет просматривать каждый файл и ориентироваться только по заголовку, но больше памяти займет. Так что расширение файла, пока это сделано для экономии памяти (здесь она существенна даже на современных компьютерах). А ассоциации файлов, тоже "текстовый редактор по умолчанию", "браузер по умолчанию"? Как из тысячи файлов без расширения они будут работать и вьювер найдет свои в проводнике Windows? Это возможно, но проводник читает реестр и ищет там заголовки файлов установленных программ, читая каждый файл в папке, сейчас он ищет только расширения в имени.
Файлы различаются не по расширению (посмотрите на движки idtech хотя бы, zip'ы с другими расширениями), а по заголовкам (ибо расширение может быть любым, но файл также его может и не иметь). Так что все форматы файлов сначала читают заголовок.
Далее. У нас графический файл, мы можем сразу вжучить информацию о разрешении и цвете, но если не знаем как цвет будет обрабатываться, мы вьювер не напишем (а собственный формат, значит и собственный вьювер). Сначала нужна палитра. Лучше всего обратиться к палитре видеодрайвера, посредством какого-нибудь WinAPI, но можно использовать возможности MS-DOS, которые из 7 винды, к слову, не удаляли. Но тут у нас будет всего 16 цветов, зато проще сделать вьювер и формат в целом.
Хранение цвета. Знаете, сколько "по умолчанию" занимает цветовая информация? Белый кодируется как FFFFFFF, оттенки серого от нуля до фффф. И это только градация серого, а вам скорее всего нужен цветной файл. Но известные форматы картинок так информацию на хранят. Пара красный-синий-зеленый представлена как два байта вида F2 23 D0. Это уже три цвета в двух байтах. Как сделано? Использование таблиц замен, которые надо расшифровывать (у них в спецификации куча настроек типа размера словаря и так далее). Почему загрузка больших картинок тормозит, как вообще может тормозить например 50МБ файл на двухядерных процессорах и порядка 4ГБ оперативной памяти? А вы знаете, сколько информации нужно расшифровать вьюверу впринципе, плюс учитывайте зарезервированную память для системы.
PNG например, использует LZW. Тот же алгоритм, что и архиватора 7зип, используемый в основном в unix. По сути, без этого ни один современный формат картинок не обходиться.
Помните про заголовки в начале? А что если ваш формат файла предусматривает несколько таблиц замен разных разработчиков (к примеру, вьювер расшифровывает и PK (зиповский заголовок) и LZW). Значит нужен второй заголовок, который определяет алгоритм паковки в этом файле и определяет дальнейший принцип работы вьювера, отдельного редактора или плагина к фотошопу. Иначе пользователю, в лучшем случае, придется задавать это самому. А что обычному человеку до того, этот PNG LZWшный или использует другой алгоритм паковки цветовых байтов?
Файлы принято разделять на строгие (поддерживают только один алгоритм) и со свободной спецификацией (гуляют несколько алгоритмов паковки, что для простого юзера просто одни и те же PNG, JPG). Из тех, которые читаются браузером (а значит известны всем), почти все форматы свободные, кроме SVG. Кстати, SVG информацию вообще не шифрует, цвет и вектор представлены в открытом виде.
В идеале программа, я считаю, файлы должна читать независимо от расширения, ориентируясь на заголовки. Но на практике, проще всего реализовать программу, где проверка идет по расширению, да и файлы JPG без расширения или с другим, практически не встречаются. В MS-DOS расширением файла программе (а тогда они в основном консольные) передавали заголовок, который сейчас является содержанием файлов. Там когда-то не было заголовков, только байты. Если мы диалоговое окно возьмем (просмотр папок после нажатия кнопки "Обзор"), то оно проверяет по расширению. А можно написать окно, которое будет просматривать каждый файл и ориентироваться только по заголовку, но больше памяти займет. Так что расширение файла, пока это сделано для экономии памяти (здесь она существенна даже на современных компьютерах). А ассоциации файлов, тоже "текстовый редактор по умолчанию", "браузер по умолчанию"? Как из тысячи файлов без расширения они будут работать и вьювер найдет свои в проводнике Windows? Это возможно, но проводник читает реестр и ищет там заголовки файлов установленных программ, читая каждый файл в папке, сейчас он ищет только расширения в имени.
Игровая графика (особенно старых игр) и квадратики в JPG -- отдельная тема. Но об игровой графике уже хорошо писал в своем рассказе про HL, нужно продолжение темы, сюда http://ficbook.net/readfic/1166983
Отмечу, что популярные форматы картинок, вроде JPG, BMP, GIF никогда палитру в себе не хранили. Их показ зависел от вьювера, который обычно обращается к палитре видеодрайвера через стандартные возможности Windows. Учитывая, что в 90-е были разные мониторы, типа VGA, EGA, одна и та же картинка могла выглядеть совершенно по другому. Старые игры хранили низкокачественную палитру для ускорения, чтобы не обращаться по каждой картинке к возможностям DOS или Windows. В DOS еще однозадачность была, запуск нескольких программ невозможен. Современные игры и нынешние форматы файлов этого (хранение палитры) не делают, когда есть драйвера.
HL палитру хранит, но не в отдельном файле для всех картинок как Quake, а создает новую для каждого файла (ВАДы, модели, спрайты). Если какого-то монстра нет на карте, скажем, то он понятно не загружается.
Сообщение отредактировал zritelvrn - 20 ноября 2013, 07:18
И вновь назовут имя чемпиона,
Он будет чемпион не хорошего, а плохого.
Почему плохого? Потому что мало нам горя.
Он будет чемпион не хорошего, а плохого.
Почему плохого? Потому что мало нам горя.
21 ноября 2013, 00:50
[ссылка]
zritelvrn > Ну, откровенно говоря, многие детали форматов... Вопрос того, что от него требуется. А заголовок (внутри) больше для отсутствия эрроров, требуется. Ну чтобы случайно не прочитать "не тот тип файла". Остальные данные (что цвета пикселей, что "общие") уже вопрос требований.
Правда тут... Я просто написал самый простой вариант. При желании можно и усложнить, но главное суть. Правда вряд-ли кто-то вообще будет делать изображения ASCII "типа". Всё-таки, смысла в этом, практически ноль.
Но что касается графических форматов, то и "дикие" есть. Подробности не помню, но например tga обычно бывает в несжатом виде. Да ещё и приходится (не обязательно, но всё же) "в ручную" его читать. В плане, самому риадер делать.
Что касается игровой графики... То тут... Только где-то со-времён Винды она начала хоть как-то стандартизироваться. Во-времена DOS-а, многие делали свои форматы. В том же Doom, например, пиксели текстур и спрайтов хранятся не "в линию" а "в столбик". Для определённого ускорения.
Рассказ начал, он интересный, только ляпов там много. >_< И кстати, будешь смеяться, но на старых компах было круче. В их поставку входил не язык вроде C/C++, а... Бейсик. У которого куда меньше возможностей. Ну и асму никто не отменял, но всё равно, основным был Бейсик.
Правда тут... Я просто написал самый простой вариант. При желании можно и усложнить, но главное суть. Правда вряд-ли кто-то вообще будет делать изображения ASCII "типа". Всё-таки, смысла в этом, практически ноль.
Но что касается графических форматов, то и "дикие" есть. Подробности не помню, но например tga обычно бывает в несжатом виде. Да ещё и приходится (не обязательно, но всё же) "в ручную" его читать. В плане, самому риадер делать.
Что касается игровой графики... То тут... Только где-то со-времён Винды она начала хоть как-то стандартизироваться. Во-времена DOS-а, многие делали свои форматы. В том же Doom, например, пиксели текстур и спрайтов хранятся не "в линию" а "в столбик". Для определённого ускорения.
Рассказ начал, он интересный, только ляпов там много. >_< И кстати, будешь смеяться, но на старых компах было круче. В их поставку входил не язык вроде C/C++, а... Бейсик. У которого куда меньше возможностей. Ну и асму никто не отменял, но всё равно, основным был Бейсик.
22 ноября 2013, 12:39
[ссылка]
Я больше удивляюсь, как можно было релизнуть майнкрафт в таком сыром состаянии!?
При наличии полигонов на видимой дистанции в количестве равноценной кол-ву полигонов на одном-двух персонажах из, допустим, скайрима, игра умудряется лагать даже на мощных машинах!
А вес такой игры - для меня больная тема, с таким кол-вом моделей, текстур и звуков игра могла бы весить в разы меньше, если бы не 4 буквы - "инди".
При наличии полигонов на видимой дистанции в количестве равноценной кол-ву полигонов на одном-двух персонажах из, допустим, скайрима, игра умудряется лагать даже на мощных машинах!
А вес такой игры - для меня больная тема, с таким кол-вом моделей, текстур и звуков игра могла бы весить в разы меньше, если бы не 4 буквы - "инди".
22 ноября 2013, 13:38
[ссылка]
Coole > Для того, чтобы делать "на чём хотеть", нормальные компиляторы нужны. В то время, как для домашних компов, с ними напряг был. Поставлялся только Бейсик. Так что... Да ещё и игры - один из самых сложных видов программ.
А вот Майнкрафт. Он же на Джава написан. Да ещё и свойства такие, что...
А вот Майнкрафт. Он же на Джава написан. Да ещё и свойства такие, что...
23 ноября 2013, 00:25
[ссылка]
Вот чего это Ютьюбовцы опять сделали!? С комментариями беспорядок и нихрена неудобно. Нельзя нормально посмотреть все связанные комментарии, как было раньше.
Записываю только со спутника!
На планете море лапок! Все подняли кверху их!
А я вночи и тяфкал и фырчал!
23 ноября 2013, 02:36
[ссылка]
Хех, если бы Сергей Брин был идиотом, то тогда бы не было Гугла, а Ютьюб скорее всего остался бы малоизвестным сайтом

Правда действительно непонятно, нахрена этот "Гугл плюс" и вообще что это такое (социальная сеть, насколько я понимаю)?
Пробил час, не остановишь нас
Свыше контролю не бывать
Делай все что по душе на своем стальном коне
Мы здесь, чтоб полночь взорвать
Свыше контролю не бывать
Делай все что по душе на своем стальном коне
Мы здесь, чтоб полночь взорвать
23 ноября 2013, 03:03
[ссылка]
Ну не идиоты, но зачем делать неудобно всё!? Вот им делать нефиг! Там и так всё было удобно и прекрасно! Так нет какую-то шляпу сделали. Комментарии связанные в переписку невозможно читать на одной странице - открывается новая вкладка постоянно и открывается там один комментарий и других связанных нет. Ерунда какая-то.
Записываю только со спутника!
На планете море лапок! Все подняли кверху их!
А я вночи и тяфкал и фырчал!
23 ноября 2013, 14:24
[ссылка]
Гугл плюс и ютуб нетолько на компьютере как бы есть. На андроиде 4.2.2 связали отлично, но по ходу применили этот же механизм и в браузере
23 ноября 2013, 16:12
[ссылка]
У нас гололед, ЖЭУ, как обычно, практически бездействуют //_=
also known as mrcatmann
mrcatmann.ru
mrcatmann.ru
23 ноября 2013, 16:13
[ссылка]
Вот мне интересно, что бы было, если бы СССР не распался, а Горбачев реализовал свой план "демократического социализма"?
also known as mrcatmann
mrcatmann.ru
mrcatmann.ru
23 ноября 2013, 17:42
[ссылка]
Есть вообще у кого-нибудь в своём городе снег? Не, серьёзно - уже 23 ноября, а у нас погода как в начале-середине октября! Даже лужи не замёрзли! Вроде по календарю ещё осень, но всю жизнь в это время уже снег лежал. По прогнозу даже 1 декабря 5 градусов тепла
Как у нас. У нас тоже было в ноябре уже зима зимой. Сугробы по колено. Мороз -15 градусов. А в этом году в октябре с 14-го выпало куча снега и была настоящая зима и он скоро расстаял. А теперь выпадет сантиметр и расстает на следующий день. Один день температура -3, а на другой - снова +3. Ерунда какая-то.
Записываю только со спутника!
На планете море лапок! Все подняли кверху их!
А я вночи и тяфкал и фырчал!
23 ноября 2013, 17:45
[ссылка]
Вот мне интересно, что бы было, если бы СССР не распался, а Горбачев реализовал свой план "демократического социализма"?
Да Горбачёв хотел развалить СССР. Он бы по-любому не оставил его. А вот если бы был СССР сейчас, то было бы всё хорошо!)
Записываю только со спутника!
На планете море лапок! Все подняли кверху их!
А я вночи и тяфкал и фырчал!