forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Delphi (http://forum.boolean.name/forumdisplay.php?f=66)
-   -   Image (http://forum.boolean.name/showthread.php?t=14508)

impersonalis 01.04.2011 17:13

Image
 
Каким образом кодируется image внутри DFM? Явно, что используется некий аналог Base64 (UUE?). Но, может кто-то сталкивался?
Код:

object Image1: TImage
      Left = -144
      Top = -48
      Width = 465
      Height = 353
      Picture.Data = {
        0A544A504547496D6167655F790000FFD8FFE000104A46494600010101004800
        480000FFDB00430006040506050406060506070706080A100A0A09090A140E0F
        0C1017141818171416161A1D251F1A1B231C1616202C20232627292A29191F2D
        302D283025282928FFDB0043010707070A080A130A0A13281A161A2828282828
        2828282828282828282828282828282828282828282828282828282828282828
        28282828282828282828282828FFC000110801B0024003012200021101031101
        FFC4001C00000203010101.....
        D2F8AED56EF24407928564E3CC72EC58AA1CF09C634973EC1FFD4A066745278E
        DC3EA9A39A5ADA3B858E7EA5A0CAEAB07233924FD0AA3AA874E608FF002DF986
        EB06D2E6BC8DA41DD742B154DEE6ECFA2D7D743A7D46A2593A78234DBE981CEB
        25BDAF03EBFBA73952424ACFFFD9}
      Transparent = True
    end


ViNT 02.04.2011 01:41

Ответ: Image
 
Похоже, начиная с некоторой позиции и до конца идут данные BMP в чистом виде, но вот что перед ними - не понятно.

IGR 02.04.2011 02:25

Ответ: Image
 
сначало идет хеадер (заголовок файла) в бмп 56 первых байт вроде как !! Ну а потом собсвенно все данные один в один в незжатом вде !!
Вообще уточнять на вики и в гугле !! Есть полное описание формата !! :)

impersonalis 02.04.2011 02:43

Ответ: Image
 
ткни в линк на описание DFM, плиз.

2ViNT,IGR нетрудно заметить ограниченность используемого для кодирования алфавита (причина - простота парсенья: не надо отслеживать эскейп-последовательности). В то время как в БаМПере (24БПП для наглядности) каждый пиксель кодируется тремя символами с алфавитом размером 256.

SBJoker 02.04.2011 19:28

Ответ: Image
 
Имхо это тупо хексы побайтно, только битмап.. хидер текстом дан..

ViNT 02.04.2011 19:34

Ответ: Image
 
Заголовок там вообще немного странный - если парсить просто как хексы - в самом начале есть запись TBitmap (что указывает на то, что по крайней мере в начале алфавит обычный), но потом ни каких осмысленных текстовых данных. Так что, возможно, там присутствует какое-то бинарное представление объекта TBitmap.

Под "данными BMP в чистом виде" я, собственно, и подразумевал запись байтов хексами. Просто я сравнивал текст и HEX-представление исходного файла изображения и находил по крайней мере совпадающие блоки (анализировал только отдельные куски).

impersonalis 26.01.2012 23:58

Ответ: Image
 
Ап. Опять чо-ли самому кодить?

ViNT 27.01.2012 01:04

Ответ: Image
 
(Если не напутал)
Группы по 2 символа - HEX-коды байтов (далее такая группа называется "байтом").
Первый байт - всегда 0x07 (не точно).
Следующие 7 байт - текст TBitmap.
Следующие 4 байта - размер данных, совпадает с аналогичной записью в заголовке BMP файла. Байты записаны в обратном порядке.
Дальше до конца - загруженный BMP файл, (заголовок и данные, как на диске).

pozitiffcat 27.01.2012 09:23

Ответ: Image
 
хексы побайтно вродекак, когда то баловался. А зачем тебе это вообще?

impersonalis 27.01.2012 11:21

Ответ: Image
 
Ну, первое применение, приходящее в голову - модифицировать картинки своих программ, исходники от которых утеряны.

pozitiffcat 27.01.2012 11:32

Ответ: Image
 
Цитата:

Сообщение от impersonalis (Сообщение 217912)
Ну, первое применение, приходящее в голову - модифицировать картинки своих программ, исходники от которых утеряны.

так можно просто создать пустой проект открыть эту dfm ку и вытащить картинку из TImage, там можно сохранить на жесткий диск, и редактируй как тебе надо и снова загружай в форму

YellowAfterlife 27.01.2012 19:09

Ответ: Image
 
Цитата:

Сообщение от ViNT (Сообщение 217891)
Первый байт - всегда 0x07 (не точно).
Следующие 7 байт - текст TBitmap.

Можно предположить что 0x07 = длина строки, с которой начинается hex-блок, и которая указывает на фомат содержимого. Не похоже на то что в конце-концов в дельфи было добавлено "приведение типов" для содержимого других форматов, но все же.

Цитата:

Сообщение от pozitiffcat (Сообщение 217913)
так можно просто создать пустой проект открыть эту dfm ку и вытащить картинку из TImage, там можно сохранить на жесткий диск, и редактируй как тебе надо и снова загружай в форму

Can haz HQ avatar:

No JPEG blocks implemented.

ViNT 27.01.2012 19:18

Ответ: Image
 
Цитата:

Сообщение от YellowAfterlife (Сообщение 217944)
Можно предположить что 0x07 = длина строки, с которой начинается hex-блок, и которая указывает на фомат содержимого.

Точно, именно так строки в паскале и представляются, как-то я не обратил на это внимаеия.


Часовой пояс GMT +4, время: 19:59.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot