Собственно, для единственного файла с флагами, с адекватным алгоритмом сжатия — и для быстрого парсинга — решение очень удачное. Например, если использовать lzw сжатие, строка прозрачных пикселов шириной в ширину одного флага, будет храниться как 1 символ (13-17 бит)
Во первых, неясно назначение букв (ясна причина их появления, но не назначение)
Во вторых, приходится загружать в память эти 80-90кб.
Да, в некоторых случаях такой способ оправдан, но в случае скайпа… это сделано, потому что так удобнее дизайнеру, и совсем не программисту.
Прошу прощения, но найдя флаг РФ по буквам RU и имея опыт разработки подсистем локализаций, я имею наглость подтверждать свои слова об удобстве парсинга из такого файла)
Взять хотя бы способы реализации вывода шрифтов под OpenGL. Самыми быстрыми являются текстурные шрифты, где нужные символы различных кодировок расположены в таком же файлике на своих местах. Так реализуются не только моноширинные, если что))
Два месяца назад я тоже реализовывал текстурные шрифты на OpenGL, по тестам они рисовались в 5 раз быстрее шрифтов из glut. За 5 минут написал программку на шарпе, которая располага символы в нужном положении, сохраняла канву, затем другой программкой (тоже писал сам, но уже как внутриигровую утилиту на движке создаваемой игры) конвертировал картинку во внутриигровой формат с информацией по каждому символу внутри.
Отсюда вопрос, если Вы генерили текстуры, Вы делали шрифты моноширинными?
Нет, пользовался информацией о ширине, рисовал полоской вырожденных треугольников, да… давно это было. Сейчас уже нормальные библиотеки есть для таких целей… 5-ю способами умеют.
Тогда бы пришлось добавить и флаги Уэльса, Шотландии и Северной Ирландии, как участников того же королевства. Кроме того, у этих стран нет двухбуквенного кода ISO 3166-1 по той же причине.
Алгоритм реализован в каждом браузере, Гугль так же поступает с большим количеством картинок.
В нужном месте задаётся блок заданного размера, потом в него подставляется бэкграунд со смещением. Смещение в данном случае вычисляется за две арифметических операции.
Нет я обычно ковыряюсь только если понравилось какое-то цветовое решение, и нужно взять оригинальный цвет, а такие вещи как правило лежат в виде рисунков в ресурсах.
Ах, ну, да, приминительно к матрицам это так =)
Меня это, кстати, почему-то всегда напрягало, хотя обозначение вектора как столбца было приятнее, чем как строки.
А в графике используется пара координат (x,y). Все нормально.
На PHP вытягивание флажка выглядит где-то так: imagecopy($dst,$table,0,0,ord($code[0])-ord('A'),($code[1])-ord('A'),16,8);
Исходя из рисунка, получается, что большинство стран называются на гласные буква A, еще пик названий приходится на начало(1-ая буква) длится 4 буквы, потом на вторую половину(12-13-ая буквы), и на вторую половину второй половины (19-20-ая буквы, длится 2 буквы). Так же между пиками(посередине-1) лежит по одной букве(G,P), которые также часто). Что-то я переморочился.., пятница, пора отдыхать…
Swati и SiSwati это язык.
Есть народность Swazi в южной африке входящая в состав Swaziland.
Есть страна Swaziland в которой на этом языке разговаривают, но флаг у неё совсем другой
Насколько я помню, координатный метод хранения мелких ихображений в одном большом паке (aka файле) применяется давно. Способ конечно хорош, но все новое — это давно и хорошо забытое старое. Аналогичный способ хранения линейной картинки с типами файлов юзается в статье про стилизованные файл-инпуты. В общем, идея хороша, но не нова и применяется весьма успешно.
Да что там далеко ходить — неужели никто не помнит процесс сжатия шрифтов в Играх? Та же картинка с координатным методом выборки необходимого символа. Основной вопрос — в построении координат. Но это уже к Скайпу.
Я вообще считаю, что зря с деревьев слезли. Пробовал обратно, но сотни миллионов лет эволюции сделали своё чёрное дело…
Как я могу судить по всеобщему восхищению — этот способ хранения флагов достаточно нетривиален. Нетривиальность означает, что программисты сами на себя призывают дополнительный геморрой, зато потом с этого имеют дополнительный профит. Сколько там им было геморроя я не знаю, но вот кол-во профита, мне кажется, равно нулю. Что они выиграли-то? Сэкономили пару килобайт на диске? Пару десятков килобайт в памяти? Одну стодвадцатьвосьмую пиконаносекунды на времени обработки?
Хм, допустим на веб странице 30 флагов отображается, на каждый файл по 2 запроса возьмем для примера — 60 запросов. Это не так мало, время загрузки у пользователя будет заметно меньше при одном файле.
Так ведь и то не факт — даже если хранить по одному флажку, они же не лежат на диске в виде ru.bmp, us.bmp и т. д., а запихнуты все вместе в один файл ресурсов :)
Скайп обладает богомерзким интерфейсом, чем собсно и отталкивает. Ну не могут нормально писаные проги обладать таким интерфейсом.
Возвращаясь к портянке флагов — места на диске жрет больше, в памяти жрет больше, вычисление координат работает не шибко быстро. Если я упускаю преимущества — велком.
Богомерзкий интерфейс — дело субъективное. и вообще: внешность и программная реализация — всё таки разные вещи. Не стоит их смешивать.
Про одну картинку в компиленой программе не могу сказать. Может и места занимает меньше (за счёт общего заголовка и сжатия). Может один объект удобнее хранить. Не знаю, не видел внутренностей.
В web css-спрайты довольно приятная штука и много чего может сэкономить (особенно когда картинок такая туча).
А если вам нужно показать 100 флажков рядом — нужно открыть 100 файлов. Вы уверены что с точки зрения программинга и потребления ресурсов это решение неудачное?
Кстати, очень, между прочим удобно с точки зрения организации данных :)
Универсальная штука.
Вы знаете, что большинство интерфейсных JS фреймворков использует подобное. То есть рисуется некоторое изображение с изображением например иконок, и потом используется всего лишь один ресурс/изображение, а не грузится каждый раз новое. С точки зрения организации данных и процессов/выделения памяти на процесс этот вариант достаточно удобен. То есть программистами всего лишь должна быть доработана система выделения части изображения из исходного.
Кто вам говорит, что картинки вырезаются?
Короче говоря, я к тому что не следует делать поспешных выводов.
По мне так skype, как ПО выполнен очень грамотно и явно делается разумными программистами.
Заглянул и я в ресурсы скайпа с вашей подачи. Порадовали language-neutral битмапки :)
Видимо при создании проекта Delphi их автоматически добавил в ресурсы, а убрать забыли :)
Прикольно — думал, что Win версия Skype разработана на C++, т.к. Linux версия на C++ с Qt, а для Maс OS X на Objective-C с Cocoa, а оказалось — на Delphi.
Я конечно чувствую себя необразованным холопом, НО — где же эта страна находится?
Читал в вика чёрным по русски — Эсперанти́да — неформальное название для сообщества людей, говорящих на эсперанто, и их культуры.
На эсперанто «Эсперантида» — Esperanto-lando, Esperantujo или Esperantio — это слова, образованные с суффиксом, при помощи которого образуются названия стран.
Эсперантида — воображаемая страна, географически охватывающая весь мир, жители которой — все говорящие на международном языке (это несколько миллионов человек).
Жители страны довольно активны. Нет дня в году, когда бы где-то в мире не проходило эсперанто-мероприятие — конгресс, тематическая или региональная встреча.
Почитайте Крис Касперски, «Skype – скрытая угроза», будет не смешно. Т.е. я догадывался, что она использует чужие реальники как промежуточные сервера, но и не подозревал насколько это подозрительная, хитрая и запутанная система.
Это может быть интересно. Какие? Генерировать css с помощью php? Если вам пустое место важней технического решения, закидаете минусами — оно само спрячется
Оригинальный способ хранения изображений флагов