Сейчас на форуме: (+5 невидимых)

 eXeL@B —› Программирование —› Что хукнуть чтоб получить адрес JPG ?
Посл.ответ Сообщение

Ранг: 226.0 (наставник), 67thx
Активность: 0.160
Статус: Участник

Создано: 19 июля 2007 09:43
· Личное сообщение · #1

Есть программа написання на Delphi. Форма на которой TImage с загруженной картинкой (JPG).
Хочу на ходу подменить рисунок. Поиск по памяти не подходит. Нужен универсальный метод, прога может быть аспром запакована.Насколько я понял, Delphi ресурс из этой JPG не делает.

Какой апи нужно перехватить чтобы получить адрес JPG в памяти ?
JPG перед рисованием на форму должна распаковываться, кто это делает ?

В проекте рисунок храниться в Unit1.dfm
object Image1: TImage
Left = 8
Top = 8
Width = 583
Height = 251
AutoSize = True
Picture.Data = {
0A544A504547496D61676511160200FFD8FFE000104A46494600010201006000
….}



Ранг: 309.8 (мудрец), 21thx
Активность: 0.170
Статус: Участник

Создано: 19 июля 2007 10:47
· Личное сообщение · #2

иди в сторону юнита jpeg.pas...

-----
Shalom ebanats!




Ранг: 226.0 (наставник), 67thx
Активность: 0.160
Статус: Участник

Создано: 19 июля 2007 11:47
· Личное сообщение · #3

SLV пишет:
иди в сторону юнита jpeg.pas...

у меня его почему-то нету только dcu.

мля, нифига не получается...
помогите plz, до вечера надо сделать.




Ранг: 103.3 (ветеран), 8thx
Активность: 0.060
Статус: Участник

Создано: 19 июля 2007 11:50
· Личное сообщение · #4

SergX, dfm (форма) хранится в ресурсах приложения.

В статике: находишь ее в ресурсах, к примеру, по имени и модифицируешь как хочешь. заменить - никаких проблем нет. посмотри исходники DeDe / различных редакторов ресурсов, это поможет.

В динамике: только во время создания формы, когда она читает свои ресурсы и создает дочерние компоненты. API работы с ресурсами (-> MSDN), интересует чтение, конечно. перехватываем чтение dfm'a, подменяем, получаем результат.

"JPG перед рисованием должен распаковываться"... это не совсем так. посмотрите как устроен TImage / TGraphics, каким образом используется jpeg.pas и поймете, как это устроено. не зря Borland vcl\source на паблик выносит.

SLV, а смысл?...




Ранг: 85.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 19 июля 2007 13:19
· Личное сообщение · #5

Во время создания формируется путь к картинке. Еще во время прорисовки (wm_paint) картинка перерисовывается в соответствии с этим путем. Всё это отследить очень сложно, проще помоему заменить картинку в статике.

-----
radio uno in ibisa ...





Ранг: 103.3 (ветеран), 8thx
Активность: 0.060
Статус: Участник

Создано: 19 июля 2007 15:03 · Поправил: NaumLeNet
· Личное сообщение · #6

Icelot, заменять картинку надо в момент чтения dfm (самый низкий уровень для динамики, ниже с такими же удобствами, имхо, уже нет, в плане перехвата). замену производить именно модифицированием dfm-контента, все остальное загружающаяся форма уже сделает сама. и по барабану формат картинки, это ваще может быть не картинка, а любые иные свойства объектов или же новые объекты вообще. сложного ничего нет. если бы обладал свободным временем попробывал бы реализовать сам.

Icelot, только что перечитал первый пост - вариант со статикой вообще отпадает из-за aspack'a. но в целом задача попахивает каким-то абсурдом, если быть честным.

SerX, если "успеешь" реализовать ;) отпишись о результатах, будь добр. все должно быть в ажуре.



Ранг: 309.8 (мудрец), 21thx
Активность: 0.170
Статус: Участник

Создано: 19 июля 2007 15:07
· Личное сообщение · #7

NaumLeNet, выследить как дельфи с jpg работает... мб чё интересное там есть что похукать можно...

-----
Shalom ebanats!




Ранг: 226.0 (наставник), 67thx
Активность: 0.160
Статус: Участник

Создано: 19 июля 2007 22:28
· Личное сообщение · #8

NaumLeNet пишет:
задача попахивает каким-то абсурдом, если быть честным.

Ты прав

Сделать успел , но совсем по другому.
Долго втыкал на Memory map в Olly, но без результатов. Как-то оно там всё странно.
Решил подойти с другой стороны и хукнул StretchBlt. Я с начала так и думал решить эту задачу, но не знал, что есть StretchBlt и безрезультатно хукал BitBlt.

Function StretchBlt (DestDC: HDC; X, Y, Width, Height: Integer; SrcDC: HDC; XSrc, YSrc, SrcWidth, SrcHeight: Integer; Rop: DWORD): BOOL; stdcall;



 eXeL@B —› Программирование —› Что хукнуть чтоб получить адрес JPG ?
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати