Форум: "Основная";
Текущий архив: 2003.11.03;
Скачать: [xml.tar.bz2];
ВнизКак получить картинку из 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.01 c