Локализация графики NHZT-W58
- bellic
- Сообщения: 1505
- Зарегистрирован: 11 мар 2017, 07:47
- Откуда: Rostov-on-Don
- Контактная информация:
Локализация графики NHZT-W58
Итак, приступаю к попыткам локализации интерфейса указанной в теме Нави-Магнитолы...
Что будем искать?
Предположительно - в ПО магнитолы должны быть текстовые сообщения на японском языке и графические элементы.
Начинаем с самого простого - поиск графики! А еще точнее - с поиска графики, НЕУПАКОВАННОЙ в спец-форматы !!!
Работать с программой ISE2 я честно сказать, так и не научился, поэтому в Интернете была найдена следующая - MultiExtractor...
Анализу были подвержены все файлы, находящиеся на открытых разделах HDD магнитолы... Но нас интересуют в первую очередь ресурсы, находящиеся в папке PRG, где находятся "кирпичики" системы.
Улов - не велик!
Еще пока три скриншота....
Напомню, что найденные выше графические ресурсы, расположены в открытом и незакодированном виде, непосредственно в файлах BRS.BIN, SD.BIN, MM.BIN и LDM.BIN.
Последний - был предварительно "препарирован" из скрытого RAW-раздела.
На этом пожалуй поиск свободно сохраненных графических ресурсов в Системе AISIN можно считать законченным!
Но это вовсе не значит конец поискам!...
Что будем искать?
Предположительно - в ПО магнитолы должны быть текстовые сообщения на японском языке и графические элементы.
Начинаем с самого простого - поиск графики! А еще точнее - с поиска графики, НЕУПАКОВАННОЙ в спец-форматы !!!
Работать с программой ISE2 я честно сказать, так и не научился, поэтому в Интернете была найдена следующая - MultiExtractor...
Анализу были подвержены все файлы, находящиеся на открытых разделах HDD магнитолы... Но нас интересуют в первую очередь ресурсы, находящиеся в папке PRG, где находятся "кирпичики" системы.
Улов - не велик!
Еще пока три скриншота....
Напомню, что найденные выше графические ресурсы, расположены в открытом и незакодированном виде, непосредственно в файлах BRS.BIN, SD.BIN, MM.BIN и LDM.BIN.
Последний - был предварительно "препарирован" из скрытого RAW-раздела.
На этом пожалуй поиск свободно сохраненных графических ресурсов в Системе AISIN можно считать законченным!
Но это вовсе не значит конец поискам!...
- bellic
- Сообщения: 1505
- Зарегистрирован: 11 мар 2017, 07:47
- Откуда: Rostov-on-Don
- Контактная информация:
Локализация графики NHZT-W58
Еще до начала поиска, методом поиска текста и известных сигнатур, было выяснено, что внутри BIN-файлов находятся графика не только в открытом виде, но и закодированная особыми алгоритмами, не известными программе MultiExtractor - это графика формата BMP.S2, BMP.SL и возможно другими.
Выделенная область КРАСНЫМ цветом - похожа на таблицу, ЗЕЛЕНАЯ снизу - похоже на тело самого файла BMP.S2-формата:
Тут мне подсказали, что у пользователя одного из форумов AS21 имеется программа его собственного изготовления JREMAKER, позволяющая распаковывать, просматривать и извлекать некоторые ресурсы из файлов LOADING.KWI, составными частями которых и были имеющиеся у меня BIN-файлы.
Что то я уже перешел на повествование...
В общем - берем свой набор BIN-файлов и в командной строке склеиваем их простой командой: (Команда вводится без разрывов - в одной строке!!!)
где:
loading_zagolovok.bin
и
aisin_zagolovok.bin - заранее подготовленные файлы определенной длины, забитые нулевыми значениями.
Еще немного поколдовав над значениями некоторых полей у меня получился корректный файл LOADING.KWI - собранный вручную и готовый для дальнейших экспериментов.
(Хорошо бы написать программу - выполняющую вышеуказанные операции в автоматическом режиме... )
С помощью JREMAKER-а из блока SD.BIN было "выужено" и распаковано в ВМР-формат 483 файла формата BMP.S2 и один - BMP.SL.
Причем последний - из графики, относящейся к навигации, поэтому им можно пренебречь!
Забыл упомянуть! - На самом деле упакованных изображений в блоках гораздо больше, но меня интересуют только те, которые имеют надписи на японском языке!!!
Они то и были подвергнуты экзекуции!
Если кому интересно - можете скачать архив и сами посмотреть полученные картинки: P.S. Кстати - кто-то утверждал, что JREMAKER мне не сможет помочь?!
А вот оказывается - очень даже пригодился!
Огромное спасибо автору Николаю (AS21), написавшего эту программу!!!
...
P.S. Не знаю по какой причине, но JREMAKER не нашел некоторые НЕ УПАКОВАННЫЕ картинки, которые были найдены с помощью MultiExtractor-a...
Выделенная область КРАСНЫМ цветом - похожа на таблицу, ЗЕЛЕНАЯ снизу - похоже на тело самого файла BMP.S2-формата:
Тут мне подсказали, что у пользователя одного из форумов AS21 имеется программа его собственного изготовления JREMAKER, позволяющая распаковывать, просматривать и извлекать некоторые ресурсы из файлов LOADING.KWI, составными частями которых и были имеющиеся у меня BIN-файлы.
Что то я уже перешел на повествование...
В общем - берем свой набор BIN-файлов и в командной строке склеиваем их простой командой:
Код: Выделить всё
copy /B loading_zagolovok.bin+aisin_zagolovok.bin+ldm_v562.bin+apfm.bin+apm.bin+aum.bin+brs.bin+dig.bin+drm.bin+drm1.bin+font.bin+mapm.bin+mdm.bin+mm.bin+mrpm.bin+osm.bin+sd.bin+ttslibm.bin+vrm.bin LOADING.KWI
где:
loading_zagolovok.bin
и
aisin_zagolovok.bin - заранее подготовленные файлы определенной длины, забитые нулевыми значениями.
Еще немного поколдовав над значениями некоторых полей у меня получился корректный файл LOADING.KWI - собранный вручную и готовый для дальнейших экспериментов.
(Хорошо бы написать программу - выполняющую вышеуказанные операции в автоматическом режиме... )
С помощью JREMAKER-а из блока SD.BIN было "выужено" и распаковано в ВМР-формат 483 файла формата BMP.S2 и один - BMP.SL.
Причем последний - из графики, относящейся к навигации, поэтому им можно пренебречь!
Забыл упомянуть! - На самом деле упакованных изображений в блоках гораздо больше, но меня интересуют только те, которые имеют надписи на японском языке!!!
Они то и были подвергнуты экзекуции!
Если кому интересно - можете скачать архив и сами посмотреть полученные картинки: P.S. Кстати - кто-то утверждал, что JREMAKER мне не сможет помочь?!
А вот оказывается - очень даже пригодился!
Огромное спасибо автору Николаю (AS21), написавшего эту программу!!!
...
P.S. Не знаю по какой причине, но JREMAKER не нашел некоторые НЕ УПАКОВАННЫЕ картинки, которые были найдены с помощью MultiExtractor-a...
- bellic
- Сообщения: 1505
- Зарегистрирован: 11 мар 2017, 07:47
- Откуда: Rostov-on-Don
- Контактная информация:
Локализация графики NHZT-W58
Начинаем изучать закодированные изображения формата bmp.s2...
Ищем с помощью JREMEKER-a небольшое по размеру изображение, например mp038.bmp.s2
...и экспортируем его ТРИ различных формата.
1. В таком виде изображение находится в БИН-файле (SD.BIN) - по его аббревиатуре, это КОНТЕЙНЕР:
2. А это - содержащееся в контейнере закодированное изображение S2:
3. Собственно - чистое ВМР-изображение, полученное после раскодировки:
На этом скриншоте даже видно, что Редактор даже сам определил поля формата - табличка внизу...
Ищем с помощью JREMEKER-a небольшое по размеру изображение, например mp038.bmp.s2
...и экспортируем его ТРИ различных формата.
1. В таком виде изображение находится в БИН-файле (SD.BIN) - по его аббревиатуре, это КОНТЕЙНЕР:
2. А это - содержащееся в контейнере закодированное изображение S2:
3. Собственно - чистое ВМР-изображение, полученное после раскодировки:
На этом скриншоте даже видно, что Редактор даже сам определил поля формата - табличка внизу...
- bellic
- Сообщения: 1505
- Зарегистрирован: 11 мар 2017, 07:47
- Откуда: Rostov-on-Don
- Контактная информация:
Локализация графики NHZT-W58
В общем выкладываю два архива - набор файлов к двум ВМР-картинкам формата S2:
mp038.bmp - реальный размер 16х16, увеличенным выглядит так:
hwy05.bmp - реальный размер 24х18, увеличенным выглядит так:
- bellic
- Сообщения: 1505
- Зарегистрирован: 11 мар 2017, 07:47
- Откуда: Rostov-on-Don
- Контактная информация:
Локализация графики NHZT-W58
Для декодирования упакованных картинок формата bmp.s2 использовался следующий код на С++:
Для декодирования упакованных картинок формата bmp.sl использовался следующий код на С++:
Автор приведенного кода - Х27, любезно разрешил использовать и публиковать его без ограничений!..
В принципе - искать и распаковывать картинки можно с помощью JREMAKER-a, а вот от задачи Упаковки исходных BMP-изображений в формат bmp.s2 никак не уйти.
Надеюсь получится из приведенного кода понять общий смысл распаковки, сам формат bmp.s2 и написать утилиту для упаковки!
Код: Выделить всё
/// <summary>
/// Распаковка .bmp.s2
/// </summary>
/// <param name="coData">Запакованные данные</param>
/// <param name="unSize">Размер распакованных данных</param>
/// <returns>Массив распакованных данных</returns>
private static byte[] Decompress(byte[] coData, int unSize)
{
// словарь
var dict = new byte[0x421];
// начальное смещение в словаре
var dictOffset = 0x3de;
// распакованные данные
var unData = new byte[unSize];
// смещение в буфере запакованных данных
var coOffset = 0;
// смещение в буфере распакованных данных
var unOffset = 0;
// контрольный байт
var control = 0;
try
{
while (true)
{
// следующий бит контрольного байта
control = control >> 1;
// кончились контрольные данные?
if ((control & 0x100) == 0)
// считываем контрольный байт
control = coData[coOffset++] | 0xff00;
// бит в контрольном байте = 0 (неупакованное значение)
if ((control & 1) == 0)
{
var value = coData[coOffset++];
unData[unOffset++] = value;
dict[dictOffset++] = value;
dictOffset &= 0x3ff;
// переходим к сл. контрольному биту
continue;
}
// упакованные данные (контрольный бит = 1)
// считываем команду
var command = coData[coOffset++];
if (command < 0x80)
{
// формируем из 3х бит команды и считанного значения абсолютное смещение в словаре
var offset = coData[coOffset++] | ((3 & command) << 8);
// выделяем из команды количество байт распакованных данных - 1
var count = (command >> 2) + 2;
// распаковываем
while (count-- >= 0)
{
var value = dict[offset++ & 0x3ff];
unData[unOffset++] = value;
dict[dictOffset++] = value;
dictOffset &= 0x3ff;
}
}
else if (command < 0xc0)
{
// формируем из команды относительное смещение в словаре
var offset = command & 0xf;
// выделяем из команды количество байт распакованных данных - 1
var count = ((command & 0x30) >> 4) + 1;
// распаковываем
while (count-- >= 0)
{
var value = dict[(dictOffset - offset) & 0x3ff];
unData[unOffset++] = value;
dict[dictOffset++] = value;
dictOffset &= 0x3ff;
}
}
// иначе идет набор неупакованных данных
else
{
// размер неупакованных данных - 1
var count = (command & 0x3f) + 7;
// копируем данные
while (count-- >= 0)
{
var value = coData[coOffset++];
unData[unOffset++] = value;
dict[dictOffset++] = value;
dictOffset &= 0x3ff;
}
}
}
}
// избавляемся от проверок размерности массивов
// и считаем первое исключение по выходу за границы массива концом распаковки
catch (IndexOutOfRangeException ex)
{
}
// остальные исключения отлавливаем
catch
{
throw;
}
return unData;
}
Код: Выделить всё
/// <summary> Распаковываем с байта, который перед "ВМ" стоит.
/// Распаковка .bmp.sl
/// </summary>
/// <param name="coData">Запакованные данные</param>
/// <param name="unSize">Размер распакованных данных</param>
/// <returns>Массив распакованных данных</returns>
private static byte[] DecompressSl(byte[] coData, int unSize)
{
// словарь
var dict = new byte[0x1011]; // присвоение значения переменной dict=[Bh] - типа словарь
// начальное смещение в словаре
var dictOffset = 0xfee;
// распакованные данные
var unData = new byte[unSize];
// смещение в буфере запакованных данных
var coOffset = 0;
// смещение в буфере распакованных данных
var unOffset = 0;
// контрольный байт
var control = 0;
try // оператор try разрешает обнаружение исключительной ситуации для остального кода
{
while (true) // начало бесконечного цикла
{
// следующий бит контрольного байта
control = control >> 1;
// кончились контрольные данные?
if ((control & 0x100) == 0)
// считываем контрольный байт
control = coData[coOffset++] | 0xff00;
// бит в контрольном байте = 1 (неупакованное значение)
if ((control & 1) != 0)
{
var value = coData[coOffset++];
unData[unOffset++] = value;
dict[dictOffset++] = value;
dictOffset &= 0xfff;
}
// бит в контрольном байте = 0 (упакованное значение)
else
{
var loOffset = coData[coOffset++];
var mixData = coData[coOffset++];
var offset = ((mixData & 0xf0) << 4) | loOffset;
var count = (mixData & 0xf) + 2;
// распаковываем
while (count-- >= 0)
{
var value = dict[offset++ & 0xfff];
unData[unOffset++] = value;
dict[dictOffset++] = value;
dictOffset &= 0xfff;
}
}
}
}
// избавляемся от проверок размерности массивов
// и считаем первое исключение по выходу за границы массива концом распаковки
catch (IndexOutOfRangeException)
{
}
return unData;
}
В принципе - искать и распаковывать картинки можно с помощью JREMAKER-a, а вот от задачи Упаковки исходных BMP-изображений в формат bmp.s2 никак не уйти.
Надеюсь получится из приведенного кода понять общий смысл распаковки, сам формат bmp.s2 и написать утилиту для упаковки!
Локализация графики NHZT-W58
а x27, попросить на основе своего кода и упаковщик написать?
- vitecd
- Сообщения: 175
- Зарегистрирован: 12 июл 2017, 06:29
- Откуда: Auckland, NZ
- Контактная информация:
Локализация графики NHZT-W58
а кто тут вообще на чем кодить могЁт?
-
- Сообщения: 1
- Зарегистрирован: 17 фев 2021, 12:45
Локализация графики NHZT-W58
Привет. Давече пытался NSZT-W62G перевести, но дальше прикола дело не пошло. radikal ru
- bellic
- Сообщения: 1505
- Зарегистрирован: 11 мар 2017, 07:47
- Откуда: Rostov-on-Don
- Контактная информация:
Локализация графики NHZT-W58
Где картинка то???freezyGrid писал(а): ↑17 фев 2021, 13:59Давече пытался NSZT-W62G перевести, но дальше прикола дело не пошло.
Кто сейчас на конференции
Сейчас этот форум просматривают: Google и 18 гостей