Добрый день! В данный момент завершаю альфа-версию моей ОС (тыц), что будет — то будет, дальше пока нет возможности и времени ее делать, но до какого-то состояния ее доведу, о чем сообщу отдельным постом.
В принципе, в моем кодописании так или иначе всё вертится именно вокруг оси, т.е. ОСи. Иногда это выплевывается в отдельные микро-проекты, о которых сейчас и расскажу.
Шрифты у меня идут растровые, 8x8. Не почему иному, просто так есть. Поскольку гламур это вещь необходимая, то хотелось немного сгладить вывод шрифтов. Но, как обычно, я был бы не я, если бы код сглаживания оказался сильно большим или кушающим много памяти. По сему решил просто посмотреть как выглядит сглаженная буква и воспроизвести это. Речь, к слову, не о субпиксельном сглаживании, а о простом — т.е. антиалиасинге.
Итак, как это сделано у меня.
При выводе символа мы проходим каждый бит и выводим соотв. пиксель. Вклиниваемся в этот процесс со второй строки сверху (первую пропускаем). Обрабатываем не отдельный пиксель, а группу по четыре (текущий, справа, сверху и справа-сверху). Т.е. обрабатываем квадрат из четырех пикселей.
Полученную «матрицу» передаем в процедуру обработки и уже она, в зависимости от получившейся комбинации, меняет цвет каждого из этих пикселей. Замечу, что обрабатываются не все комбинации, только 6 — этого достаточно. На второй картинке (т.е. та что справа) видны все обрабатываемые комбинации (это вообще доступные комбинации, а не конкретно для буквы S). Если матрица является искомой — меняем черные (т.е. активные) пиксели на темно-серый, а прозрачные (белые, неактивные) на светло-серый.
Если матрица не входит в число 6-и искомых — ничего не трогаем вообще в ней. Цвета (черный, серый и пр.) только для теста, естественно, что прозрачный пиксель надо брать с экрана, а «серые» — это степень полупрозрачности.
И так каждый пиксель строки. Следующую строку обрабатываем так же, т.е. каждый ряд (кроме 1-го) попадает под обработку дважды — как текущая строка и как строка сверху в матрице.
Но в вот, собственно, результат. По мне — очень неплохо минимальными ресурсами и усилиями.
Код и скомпилированная программка-пример тут.
Находится он тут. Собственно, всё понятно — просто собраны в одну библиотеку исходники для шифрования (ГОСТ (оба), RC4, VMPC, RC6, AES, Serpent, Blowfish), хеширования (CRC32\64, MD5, GOST (оба)) и сжатия данных (LZMA, LZW, LZO).
Как использовать криптографический набор есть на гитхабе и в примере (test.exe, исходник его там же).
вещь номер три — мой небольшой архиватор WinKAR. Основан на указанной выше «библиотеке». Соотв. может компрессить с LZMA (почти 7zip), LZW и LZO. LZW тут просто для красы, т.к. смысла особого в нем нет, хотя по идее он должен был стать у меня компромиссом между LZMA и LZO.
Также в архиваторе можно использовать шифрование, если указан пароль. Для каждого файла в архиве можно использовать как свой метод сжатия, так и свой метод шифрования (и пароль).
Скачать можно тут или тут. Кстати, архиватор весит 38 килобайт без всяких упаковщиков.
Делал больше для себя, поэтому прошу прощения за неудобный интерфейс.
В принципе, в моем кодописании так или иначе всё вертится именно вокруг оси, т.е. ОСи. Иногда это выплевывается в отдельные микро-проекты, о которых сейчас и расскажу.
Вещь первая — сглаживание (антиалиасинг) шрифта
Шрифты у меня идут растровые, 8x8. Не почему иному, просто так есть. Поскольку гламур это вещь необходимая, то хотелось немного сгладить вывод шрифтов. Но, как обычно, я был бы не я, если бы код сглаживания оказался сильно большим или кушающим много памяти. По сему решил просто посмотреть как выглядит сглаженная буква и воспроизвести это. Речь, к слову, не о субпиксельном сглаживании, а о простом — т.е. антиалиасинге.
Итак, как это сделано у меня.
При выводе символа мы проходим каждый бит и выводим соотв. пиксель. Вклиниваемся в этот процесс со второй строки сверху (первую пропускаем). Обрабатываем не отдельный пиксель, а группу по четыре (текущий, справа, сверху и справа-сверху). Т.е. обрабатываем квадрат из четырех пикселей.
Полученную «матрицу» передаем в процедуру обработки и уже она, в зависимости от получившейся комбинации, меняет цвет каждого из этих пикселей. Замечу, что обрабатываются не все комбинации, только 6 — этого достаточно. На второй картинке (т.е. та что справа) видны все обрабатываемые комбинации (это вообще доступные комбинации, а не конкретно для буквы S). Если матрица является искомой — меняем черные (т.е. активные) пиксели на темно-серый, а прозрачные (белые, неактивные) на светло-серый.
Если матрица не входит в число 6-и искомых — ничего не трогаем вообще в ней. Цвета (черный, серый и пр.) только для теста, естественно, что прозрачный пиксель надо брать с экрана, а «серые» — это степень полупрозрачности.
И так каждый пиксель строки. Следующую строку обрабатываем так же, т.е. каждый ряд (кроме 1-го) попадает под обработку дважды — как текущая строка и как строка сверху в матрице.
Но в вот, собственно, результат. По мне — очень неплохо минимальными ресурсами и усилиями.
Код и скомпилированная программка-пример тут.
Вещь вторая — готовый к работе сборник исходников для шифрования и компрессии
Находится он тут. Собственно, всё понятно — просто собраны в одну библиотеку исходники для шифрования (ГОСТ (оба), RC4, VMPC, RC6, AES, Serpent, Blowfish), хеширования (CRC32\64, MD5, GOST (оба)) и сжатия данных (LZMA, LZW, LZO).
Как использовать криптографический набор есть на гитхабе и в примере (test.exe, исходник его там же).
… а вот как использовать сжатие:
вещь номер три — мой небольшой архиватор WinKAR. Основан на указанной выше «библиотеке». Соотв. может компрессить с LZMA (почти 7zip), LZW и LZO. LZW тут просто для красы, т.к. смысла особого в нем нет, хотя по идее он должен был стать у меня компромиссом между LZMA и LZO.
Также в архиваторе можно использовать шифрование, если указан пароль. Для каждого файла в архиве можно использовать как свой метод сжатия, так и свой метод шифрования (и пароль).
Скачать можно тут или тут. Кстати, архиватор весит 38 килобайт без всяких упаковщиков.
Делал больше для себя, поэтому прошу прощения за неудобный интерфейс.
Поделиться с друзьями
Refridgerator
Я похожий принцип сглаживания когда-то для zx spectrum использовал: