Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.03;
Скачать: CL | DM;

Вниз

Как получить картинку из TWebBrowser или TEmbeddedWB?   Найти похожие ветки 

 
dimonka ©   (2003-10-20 20:43) [0]

Большая проблема - нужно как-то выцарапать картинку из открытой страницы в TWebBrowser (TEmbeddedWB). Рылся на конференциях в Yahoo, но там предлагают только скачать её ещё раз, узнав SRC картинки через OleObject броузера. Но мне нужно именно ту, которая УЖЕ скачана и открыта в данный момент, т.к. картинки бывают и такие - <img src="image.cgi">, которая каждый раз разная, а мне нужно ту, которая в данный момент на экране. Как это сделать? Или хотя бы где искать ответ? Может можно как-то из кэша достать? Как? Где? ХЭЛП!


 
nikkie ©   (2003-10-20 23:15) [1]

я тоже искал на гугле - в основном предлагают взять src картинки и использовать UrlDownloadToFile. на самом деле есть возможность адаптировать эту функцию, чтобы не происходило обращения к сетевому ресурсу, а картинка бралась из кеша (надо реализовать интерфейс IBindStatusCallback, передаваемый последним параметром, и при вызове GetBindInfo указать флаг BINDF_OFFLINEOPERATION). но если цель - взять картинку из кеша, то проще воспользоваться функцией GetUrlCacheEntryInfo. надо, конечно, учесть, что картинки в кеше может и не оказаться...

наиболее красивым способом было бы получение от объекта соответсвующего нужному тагу-картинке интерфейса типа IPersistFile, но насколько мне помниться, объект этот такой интерфейс не предоставляет :(

ну и как еще вариант - один человек на форуме говорил, что он сохранял страницу в bitmap и потом вырезал из него картинку...


 
Ломброзо ©   (2003-10-20 23:26) [2]

Явот не пробовал, но можно попробовать опросить IHTMLImgElementDisp на предмет IPicture. Другой стопроцентный способ - действительно, взять у картинки проперти src и вызвать OleLoadPicturePath.


 
Ломброзо ©   (2003-10-20 23:49) [3]

Полистав MSDN, спешу огорчить. Простого способа нет. Они настаивают на использовании функции

Private Declare Function URLDownloadToFile Lib "urlmon" Alias _
"URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal _
szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long


 
Ihor Osov'yak ©   (2003-10-21 00:56) [4]

Да, действительно простого способа нет.. Обратите внимане - даже иешка, когда даешь сохраникть страницу полностью - перечитывает картинки (с кеше, или с инет)..

Так что действительно - или деркать с кеша, см. GetUrlCacheEntryInfo, как говорил nikkie, или грузить повторно, или перегонять в битмап с вебброуззера - не знаю, имел ли меня nikkie в виду, но я так тоже делал,
с дальнейшим "вырезанием"..
(повторную загрузку также гонял, с кеша только не дергал - но это уже специфика задачи была)..


 
nikkie ©   (2003-10-21 01:26) [5]

>не знаю, имел ли меня nikkie в виду, но я так тоже делал,
:)
нет, я имел в виду SergP, он говорил, что так делал. значит есть по-крайней мере два человека, которые сделали это таким страанным способом ;p


 
SergP ©   (2003-10-21 05:47) [6]


> nikkie © (21.10.03 01:26) [5]
> >не знаю, имел ли меня nikkie в виду, но я так тоже делал,
> :)
> нет, я имел в виду SergP, он говорил, что так делал.


извращенцы :)


> nikkie © (21.10.03 01:26) [5]
> >не знаю, имел ли меня nikkie в виду, но я так тоже делал,
> :)
> нет, я имел в виду SergP, он говорил, что так делал. значит
> есть по-крайней мере два человека, которые сделали это таким
> страанным способом ;p


Мне просто приходилось так делать. Ведь при повторной загрузке сервер менял картинку, так что мне "нормальный" вариант не подходил.


 
dimonka ©   (2003-10-22 19:39) [7]

Ну я точно знаю, что когда я жму на саму картинку и в контекстном меню выбираю Save Picture As, то IE её по новой не качает. Он её откуда-то берёт, и я тоже оттуда её взять хочу, т.к. мне картинку нужно брать как раз при показе меню, то есть OnShowContextMenu. Ну а что касается сохранение страницы в bitmap - я находил исходники для этого, только вот не знаю - как потом в этом битмапе найти мою картинку? Как я узнаю абсолютные координаты?


 
Ihor Osov'yak ©   (2003-10-22 19:50) [8]

2 [6] SergP © (21.10.03 05:47)

Ситуация аналогичной была :-)

2 [7] dimonka © (22.10.03 19:39)

> Как я узнаю абсолютные координаты?

А это другой вопрос. Если актуально - скажите, поищу среди исходников (там есть несколько нюансов при учете фреймов и возможного скролинга.. )..
Хотя было-бы больше интересно, чтобы вы покопались в направлении "Он её откуда-то берёт, и я тоже оттуда её взять хочу" с последующим обнародованием результатов.. :-)


 
dimonka ©   (2003-10-23 00:43) [9]

2 Ihor Osov"yak: да вот уже дня три роюсь, но что-то всё никак...Пока самое лучшее, что я нашёл - это с помощью execCommand копировать картинку в буфер обмена, и оттуда уже в фал писать - быстро, просто и ничего качать не надо. Вот как это выглядит:
ctrlRange := Browser.OleObject.Document.body.createControlRange;
ctrlRange.add(CurImage);
ctrlRange.execCommand("Copy");
Где ctrlRange: OleVariant, а CurImage - это IDispatch, один из параметров OnContextMenu. Хотя я уверен, что есть другое решение. Можно как-то с помощью execCommand заставить сделать картинке Save Picture As, не спрашивая юзера и указав файл самому, но я не знаю правильных аргументов, и найти пока не смог. Кстати, не подскажите - как в Delphi из TClipboard извлечь картинку куда-либо, и потом оттуда запихнуть её назад? А то данные при моих махинациях могут теряться... С текстом всё ясно, а вот с графикой мне TClipboard не удаётся подружить...



Страницы: 1 вся ветка

Текущий архив: 2003.11.03;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.015 c
1-8515
Андрей Андреевич
2003-10-23 17:07
2003.11.03
Можно как нибудь проверить орфографию а тексте


14-8645
kaif
2003-10-13 16:13
2003.11.03
Диссертация об альтруизме


4-8707
MadMag
2003-09-01 13:09
2003.11.03
не идет работа с ком портом из dll


6-8556
Вася Н.
2003-09-09 16:32
2003.11.03
Две сетевые карты


1-8540
OlegM
2003-10-23 13:02
2003.11.03
Как в StringGride сделать чтобы текст в ячейке был двухстрочный