LINUX.ORG.RU

Изменение буквы в атипичном шрифте

 


0

1

Приветствую, пытаюсь изменить букву в шрифте, но не могу понять как её определить и к каким форматам записать, не ширину не высоту изменить не получается, не расширить не сузить. Букву имеет огромные отступы слева и справа. Всё что есть в шрифте это адресация на эти буквы и всё, на этом шрифт оканчивается.

Буква а(русская) -

A8C0146B0BACCA5E955A56AD6A59D5FBB521AEC769B601535727891791C5212B15F211B0A3533F326446884641A514BC0C7479A7976B9167F6CEB4EC0C6C0D585E4B7D29AD464AB4552A97E596A7AD52DD82EDB25567AB88B697B32E3D7FEC95939B84944C010F12C13F

Буква б(русская) -

1A632AADA1429B4AF894744CE9ABC956989F69D9D35252AD5534AD78FA2AF82AAA95554F872D8F3D1EAB60F25A3230635D023E8A7504A947624644B876BCEC86E08D37DAD4E7A6626E5F75BA02CDD8523CB26EC582D5F2ABF5C95A97AA9A69EAD9A792CE1FDD3601

Буква в(русская) -

52E7349510541166A39A46B6626A45D5D6DDD2638EC741B982D853AFA2C453CA374935826A953134D8290DAB84D5CD544C4F969B1E59C9B0B232B314FBE4EC26828181E20041F0799030D94D5028D0342808C412180482090E059A0408C18E0284E1E44042F08920A1D8151101B1B0E0F85360E8BC3438245E1B280EAF0D178265870BC485C48500684103F207

файл шрифта - yandex.disk - https://disk.yandex.ru/d/KU7NYdpBEflWyw Находится всё это дело в .so файле yandex.disk - https://disk.yandex.ru/d/jXkDdxckvoW9ag



Последнее исправление: isay_d (всего исправлений: 3)

1) Как ты определил количество байт в описании буквы?

2) Буквы строчные или заглавные?

3) Ты пробовал переставлять «адресацию» с буквы а на букву б и буква действительно меняла своё изображение на новую?

4) Попробуй рандомно поменять какой-нить бит ближе к началу/середине/концу описания буквы и посмотри что изменится в картинке

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 2)
Ответ на: комментарий от firkax
  1. Там есть адресация на каждую букву(изначально затирал дату, предполагая что это отрисовка буквы в итоге так и оказалось) и на каждую отрисовку есть адресация
  2. Которые я разместил - строчные
  3. Можно поставить код буквы «а» на код буквы «б» будет отрисовываться буква «а», хотя печатаем букву «б»
  4. При изменении первых 2 байт буква исчезает, изменяя остальные буква «плывет» вверх вниз либо изменяется заливка буквы
isay_d
() автор топика
Ответ на: комментарий от isay_d

То есть изменение бита ближе к началу и ближе к концу даёт примерно одинаковый масштаб изменений картинки? А если самый последний бит изменить? Он в последнем байте либо 0x01 либо 0x80 (попробуй оба).

firkax ★★★★★
()
Ответ на: комментарий от firkax

В букве а при изменении последних 7 или 6 байтов ничего не меняется(точно не помню если сильно важно смогу завтра проверить) при изменении в букве «б» в последнем байте одного из битов буква едет непонятно куда. При этом что бы я не пытался менять пробелы(кернинг) с Боков буквы никогда не уменьшались

isay_d
() автор топика
Ответ на: комментарий от isay_d

А если менять местами буквы две то их ширина (пробелы с боков) тоже меняется вместе с картинкой? А то может оно вообще в другом месте хранится.

Сложно так на словах обсуждать. Я подозревал что там векторное описание с побитовым форматом потока команд, но тогда бы наверно изменение некоторых битов в начале портило букву целиком, а не смещало её, сохраняя в целом контур. Либо можно было бы выделить отдельные биты которые отвечают за отдельные элементы.

А так, ну остаётся открыть прогу в отладчике и поставить брейкпоинт на чтение описания буквы a, например, и изучать код который это делает.

firkax ★★★★★
()
Ответ на: комментарий от frob

Магнитолла, если переадресовать то получится, что отступ слева пропадает и появляется огромный отступ справа. Если засунуть кириллическую букву в латинскую, то отступы остаются, но буква не влазит и остается слева отступ и справа буква обрезается. Готовлю обновление по вопросу где распишу значение каждого бита в букве, думал будет быстрее, но решил больше заглобалить.

isay_d
() автор топика
Ответ на: комментарий от isay_d

Если латинская и кириллическая «а» выглядят в целом одинаково и отличаются только отступами, то такое поведение при подмене пахнет тем, что ширина символов хранится отдельно.

Если это вектор, то закодированы скорее всего кривые Безье и возможно отрезки прямых. Предполагая, что шрифт «обычный», я бы начинал со сравнения букв с прямыми участками и частично совпадающих друг с другом. Скажем «ПМН», «БВР» и т.п.

Ну и сабо самой стоит сравнить совпадающие по начертанию латинские и кириллические.

frob ★★★★★
()
Последнее исправление: frob (всего исправлений: 1)

Судя по полному совпадению данных одинаково выглядящих кириллических и латинских букв, метрики хранятся отдельно.

У части букв маловато байт в данных, чтобы что-нибудь полезное закодировать. Возможно каждая координата задаётся меньше чем байтом. Не имея хоть какого-нибудь представления о том, как всё это выглядит, проблематично сделать что-то ещё.

frob ★★★★★
()
Ответ на: комментарий от frob

Выглядят внешне да - в целом одинаково, но сам hex у них разный.

a английская -98AAF4AD2A2E4D5CDDB74D993B0EAC1D5FBC9E85AC08594B904964919C2E5A470C750C3111AA96E017A02FBDEDEA57DBD699A633ED39D35993A3D789BB7E521596A42A59DA40B219DDB4DBD82AB2F52F5B5FA03FB6756174801040C8100000

а русская - A8C0146B0BACCA5E955A56AD6A59D5FBB521AEC769B601535727891791C5212B15F211B0A3533F326446884641A514BC0C7479A7976B9167F6CEB4EC0C6C0D585E4B7D29AD464AB4552A97E596A7AD52DD82EDB25567AB88B697B32E3D7FEC95939B84944C010F12C13F

В целом, в файле других метрик не нашёл.

Если поставить Английскую букву на место русской будет так - |a |, а русская отображается так | a |, английская же отображается корректно(на своём месте) |a|то есть это в целом подтверждает теорию о нахождение метрик в другом месте, но теперь как их найти

Если я размещу русскую букву в английской ячейке то будет пол букву видно только | a| и вот пол буквы перекрывается и начинается следующая, то есть отступы есть и в самом коде буквы

isay_d
() автор топика
Последнее исправление: isay_d (всего исправлений: 2)
Ответ на: комментарий от isay_d

Уверен, что не попутал буквы?

Поищи «a8c014». В файле их два и «хвосты» совпадают. Есть и другие идентичные наборы там где вероятно находятся совпадения («сс», «ее», «оо», «уу» и пр.).

frob ★★★★★
()