Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.008 c
4-8739
Miralex
2003-08-27 14:00
2003.11.03
Как получить список всех переменных чужой програмы?


6-8575
Поляков Владимир Викторович
2003-09-09 12:22
2003.11.03
Voice & UDP


3-8261
Alexus
2003-10-14 15:23
2003.11.03
Проблема с датой


1-8523
Igit
2003-10-23 17:04
2003.11.03
LPVOID в Дельфи


1-8541
Романов Р.В.
2003-10-22 10:30
2003.11.03
SelectDirectory with Create





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский