Главная страница
    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.01 c
1-8366
The X
2003-10-22 04:51
2003.11.03
Нужно перевести текст консольного приложения в


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


3-8282
abc1
2003-10-13 18:23
2003.11.03
Проблема с ADO


14-8665
Нурик
2003-10-14 02:40
2003.11.03
Заполнение анкеты


1-8487
Mag
2003-10-24 17:32
2003.11.03
Бегущая строка





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский