|
|
|
Плагин для работы с файлами |
|
|
Cockney |
17.4.2016, 9:45
|
Master
Сообщений: 1.402
Регистрация: 22.6.2013 Группа: Пользователи Наличность: 21916
Пользователь №: 16.156
|
Кто сталкивался с таким?
Есть элемент размера дворд (сразу скажу, что это часть заголовка бмп, ширина или высота картинки). Считал, получил младший байт с размером(т.к. ширина меньше 255, то он и будет в младшем байте лежать). Но стоит увеличить ширину, к примеру, до 500, и код, обрабатывающий младший байт идет мимо. Нужно работать со старшим словом. Естественно, размер картинки заранее не известен, и код соответственно разный. Есть какие идеи, че можно с этим придумать? И подчеркну, о бмп неизвестно абсолютно ничего.
|
|
|
|
DarkMaster |
17.4.2016, 15:33
|
Модератор UOPilot
Сообщений: 9.573
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 28548
Пользователь №: 11.279
|
Цитата Документация тут поможет только для получения смещений полей. Все.
Кхе. Доки я уже когда-то смотрел, как уже писал. Может я не совсем корректно выразился "кодировки", если угодно "форматы". Бмп он не один. Его много. В этих "много" как раз куча разных вариантов заполнения шапки. Что точно помню, так это то, что там в начале идет номер байта с которого начинается не посредственно битовая маска(это статично во всех форматах), а после уже остальной заголовок который сильно разнится по размеру, полям и содержанию в зависимости от "формата". В общем виде может оказаться проще посмотреть начала битовой маски и размер файла, чем заниматься поддержкой всех полей.
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
Cockney |
17.4.2016, 16:38
|
Master
Сообщений: 1.402
Регистрация: 22.6.2013 Группа: Пользователи Наличность: 21916
Пользователь №: 16.156
|
Ну, тут срежем, там обойдем, и получится не полноценная, асфальтированная дорога, а протоптанная дорожка.
Ты не понимаешь про что я. Мне все равно какие поля и за что они отвечают и как расположены, мне важно получить правильные данные, которые находятся в этих полях.
Как я уже говорил : есть дворд(8573465947398), но ценных данных в нем - 1 байт. И именно его нужно получить, причем не зная где и как он в этом дворде расположен. Вот в чем проблема.
Вернее как он расположен мы знаем, но не знаем, байт ли нам нужен или нет.
|
|
|
|
DarkMaster |
17.4.2016, 17:22
|
Модератор UOPilot
Сообщений: 9.573
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 28548
Пользователь №: 11.279
|
Цитата Ну, тут срежем, там обойдем, и получится не полноценная, асфальтированная дорога, а протоптанная дорожка. Ты собираешься работать со всеми бмп? Ищи либу. Я реально не вижу обрабатывать, например, сжатие в бмп - им никто не пользуется. Цитата Вернее как он расположен мы знаем, но не знаем, байт ли нам нужен или нет. Смотри доки, смотри какие структуры могут содержаться и в каких форматах. Это надо тупо сидеть и дословно перерисовывать 10 вариантов стандарта в код.
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
Cockney |
17.4.2016, 18:16
|
Master
Сообщений: 1.402
Регистрация: 22.6.2013 Группа: Пользователи Наличность: 21916
Пользователь №: 16.156
|
Нет, я имею ввиду, сооовсем другое. Смотри : Код //делаем дворд //сначала or потом shl set $a FilesAPI.LogicOR (*250* *16*) //250 - старшая часть, 16 - младшая set $g FilesAPI.LogicSHL (* $a * *16*) //сдвиг влево на 16 set logging $g end_script
Этот код генерирует дворд, представь, что этот дворд мы прочитали из файла. Получается : 16384000. Запоминаем. Этот дворд имеет основание - 250, что входит в рамки 1 байта. А вот следующий дворд : Код //делаем дворд //сначала or потом shl set $a FilesAPI.LogicOR (*340* *16*) //340 - старшая часть, 16 - младшая set $g FilesAPI.LogicSHL (* $a * *16*) //сдвиг влево на 16 msg $g end_script
Получаем 22282240. Тоже запоминаем. И думаем, что мы прочитали это из файла. Этот дворд уже имеет основание 340, что выходит за рамки байта и подпадает под ворд. Итого имеем : 16384000(250) и 22282240(340). Вот. А теперь представь, что мы не знаем какое у них основание. Просто прочитали и все. Но, из этих чисел нужно вытащить эти основания. Из одного вытащить 1 байт(250), а из другого 2(340). Надеюсь я понятно пояснил задачу. Если под форматом бмп имеется ввиду порядок байт, то можно прочитать их в нужном режиме, но проблема другого характера. Нужно понять, что перед нами - 1 байт или 2.
|
|
|
|
DarkMaster |
17.4.2016, 18:37
|
Модератор UOPilot
Сообщений: 9.573
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 28548
Пользователь №: 11.279
|
Цитата Если под форматом бмп имеется ввиду порядок байт Под ним имеется ввиду заголовок в комплексе и сжатие битмапа. Цитата Нужно понять, что перед нами - 1 байт или 2. Дворд предполагает, что у нас есть 4 байта и эти 4 байта могут иметь значения от 00 до ff каждый. Если значение хранится и менно в дворде, то при хранении, например, 250, он не допускает наличие каких-либо значений в остальных байтах, соответственно мы можем смело утверждать, что запись будет выглядеть, как: 00 00 00 FA // При нормальном порядке байт FA 00 00 00 // При обратном порядке байт. Т.е. чтобы понять сколько у нас по факту байт используется и вычислить основание, нам просто нужно посчитать количество пустых байт подряд начиная со старшего. Ну либо я так и не понял тебя... Если же это не натуральный дворд и количество байт выделяемых под размер динамическое, то должен быть либо указатель/номер байта либо какое-то дополнительное поле в структуре дающее понять где начало и где конец значения, чтобы отделить его от следующего параметра структуры. Если я все еще туплю - напиши пару примеров в хексе: до значения, занчение, после значения. Сообщение отредактировал DarkMaster - 17.4.2016, 18:35
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
|
|
7 чел. читают эту тему (гостей: 7, скрытых пользователей: 0)
Пользователей: 0
|
|