| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > txt->bmp |
| Автор: BLACK_KOT 29.9.2010, 13:03 | ||
когда на форму кидаешь картинку делфи сохраняет её в текстовом виде в файле формы .dfm примерно так:
моя прога работает с файлами .dfm , извлекая от туда нужное. например находит описание кнопки, её размеры, свойства, события и генерирует такуюже, только на winapi. как мне из этого текста собрать картинку? |
| Автор: Snowy 29.9.2010, 13:42 | ||
|
| Автор: Alexeis 29.9.2010, 13:56 |
| BLACK_KOT, универсального способа открытия любого dfm файла нет. Каждый компонент может сериализоваться особым способом. Конкретно для битмапа имеем 07 - длина строки определяющая название метакласса, затем сама строка названия ASCII - "TBitmap", затем вероятно размер битмапа в байтах hex - 32 25 00 00 = 9522, после чего идет "BM" сигнатура битмапа. Фактически после размера битмапа в хексе все байты битмапа, которые нужно сконвертировать из текстового представления в бинарное и сохранить на диске. |
| Автор: BLACK_KOT 29.9.2010, 15:45 | ||||
всё ясно кроме этого. как мне сконвертировать из текстового представления в бинарное? вот конкретная картинка: (целиком)
тоесть я должен скопировать: 424D7E000000000000003E000000280000001000 0000100000000100010000000000400000000000000000000000020000000200 000000000000FFFFFF00FEBF0000F80F746FF0076772E0036869C0016170C001 000080000D0080000C018000000080000000C0010000C0010000E0030000F007 FFFFF80FFFFFFFFF0000 и конвертировать этот текст в бинарник. так? подскажите как это сделать |
| Автор: Snowy 29.9.2010, 16:39 |
| Любой объект из dfm можно сконвертить с помощью ObjectTextToBinary. И наоборот - ObjectBinaryToText превратит объект, сохранённый в стрим, в его текстовое dfm представление. Ну, а если вручную, то поочерёдно каждую пару хекс символов поочереди перегоняешь в байт и пишешь в стрим. Добавлено через 3 минуты и 46 секунд А смысл расковыривать dfm ручками? Конвертни его целиком в бинарник, да работай с готовым бинарным стримом. Добавлено через 11 минут и 35 секунд Если охота ворочать бинарный стрим ручками, то можешь посмотреть, как это делает TReader - он просто разбирает его на составляющие, вытягивая проперти, классы, имена, значения, стримы и т.д. Собственно его сама дельфя и юзает. Это гораздо удобне, чем парсить текст dfm, в котором может быть что угодно, в том числе и не предусмотренное. Тогда твой код собъётся нафиг. А, парся бинарный стрим, можно просто проскимнуть неизвестные вещи. Там всё пишется единообразно. Либо пишется фиксированное простое значение, типа integer'a Либо 2 байта длина, а потом само тело значения, Либо идёт код начала списка, перечисление значения, код завершения списка. |
| Автор: BLACK_KOT 29.9.2010, 16:50 |
| спасибо, Snowy |