Перейти к содержанию

ComCrow

Стажёры
  • Постов

    2
  • Зарегистрирован

  • Посещение

Репутация

0 Навыки не прокачены

Посетители профиля

Блок последних пользователей отключён и не показывается другим пользователям.

  1. Сразу столько интересного. Обязательно ознакомлюсь, спасибо. Т.е есть вектор в котором всё хранится, если максимально просто vector<char> trash размером 100. Мы знаем, что картинка начинается обязательно с 0x89, 50, 4E, 47, и обязательно заканчивается на 42, 60, 82. И нам нужно найти номера элементов, которые равны 89 и 82, и чтобы обязательно сбоку были 50 и 60. Допустим такие расположены в ячейках 20, 40, 60, 80. Заносим эти номера в vector<int> start_point и vector<int> end_point. Далее прогоняем по циклу. Все char с 20 по 40 записать в файл 1.png, все char с 60 по 80 в файл 2.png А так, к созданию представления я бы своим умом бы долго приходил)
  2. Доброго времени суток, предполагаю, что изобретаю велосипед, поэтому решил спросить у знатоков. Из интереса расковыриваю файлы ресурсов игр. Самым простым оказалось извлекать картинки из файлов с расширением rpa. Видимо там нет шифрования. Объясню как именно это делаю. Объявил класс Token c полями char note и int reading. ifstream читает файл и заполняет в vector<Token>. В char идёт исходное значение, в int значение, которое удобно читать. Когда я до этого пытался написать свой hex-редактор, стоткнулся с тем, что если при преобразовании char в int получается отрицательное число, то в шестнацатеричном виде выводиться ffffc3 например. Сравнивая с тем, что выдают уже готовые hex-редакторы обнаружил, что к таким числам прибавляется 256. Почему так, я так и не понял, но зато мне мой редактор стал выдавать именно, то что надо. Соответственно читая на хабре как устроен PNG, и читая какую нибудь картинку я теперь получаю, то что надо и могу двигаться дальше. В текущей программе, которая не только читает биты, но и извлекает, по этой причине я и объявил Token, где одно поле для записи и чтения файла, а другое для анализа. После того, как файл прочитан, прогоняю через цикл vector, и в других методах сравниваю, каждый элемент: Привёл только один метод, но по факту получаю 2 вектора с сигнтурой начала и конца файла PNG. В будущем планирую и другие форматы добавить, но пока итак проблем хватает. После чего проверяю, что оба вектора равной длины, беру номера пар элементов, и записываю в каждый раз новый ofstream от сих до сих. И на небольших файлах всё работает замечательно. Я брал файл 35 Мб, и извлёк из него 80 картинок, но когда попробовал с файлом 153 Мб, получаю bad_alloc, даже если оперативной памяти хватает. Подозреваю, что другие люди с прямыми руками уже делали что либо подобное, но в гугле не смог ничего найти. Пока не хватает фантазии придумать что-то адекватное, только если объявить vector<vector<Token>>, но как-то даже для меня слишком костыльно. Был бы признателен, если наставите на путь истинный.
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.