Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 05.10.2010, 16:09
MrDiG MrDiG вне форума
Начинающий
 
Регистрация: 05.10.2010
Сообщения: 112
Репутация: 1227
По умолчанию Скриншот части WebBrowser в файл

В WebBrowser - страница на флеше. Нужно сделать скриншот части этой страницы по зададнным координатам и сохранить в файл в формате jpg.
(В этой части страницы captcha, которая затем будет отправлена на сервис antigate).

Есть процедура скриншотящая весь WebBrowser:
Код:
procedure TForm1.WebBrowserScreenShot(const wb: TWebBrowser;
  const fileName: TFileName);
var
viewObject : IViewObject;
r : TRect;
bitmap : TBitmap;
begin
if wb.Document <> nil then
begin
wb.Document.QueryInterface(IViewObject, viewObject) ;
if Assigned(viewObject) then
try
bitmap := TBitmap.Create;
try

r := Rect(0, 0, wb.Width, wb.Height) ;  //left, top, right, bottom
bitmap.Height := wb.Height;
bitmap.Width := wb.Width;

viewObject.Draw(DVASPECT_CONTENT, 1, nil, nil, Application.Handle, bitmap.Canvas.Handle, @r, nil, nil, 0) ;
with TJPEGImage.Create do
try
Assign(bitmap) ;
SaveToFile(fileName) ;
finally
Free;
end;
finally
bitmap.Free;
end;
finally
viewObject._Release;
end;
end;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
WebBrowserScreenShot(WebBrowser1,'c:\WebBrowserImage.jpg') ;
end;

Знаю о существовании:
Код:
procedure CopyRect(const Dest: TRect; Canvas: TCanvas; const Source: TRect);

И её API аналога:
Код:
BitBlt(Image2.Canvas.Handle, Xd, Yd, Image1.Canvas.Handle, Xs, Ys, X1s, X2s, SRCCOPY);

Но заставить всё это богатство работать совместно - не удаётся.
Фактически - мне нужно сохранение в файл jpg указанной четырьмя точками области WebBrowser.
Ответить с цитированием
  #2  
Старый 06.10.2010, 07:28
Аватар для Bars1992
Bars1992 Bars1992 вне форума
Активный
 
Регистрация: 24.04.2010
Адрес: Украина, Кременчуг
Сообщения: 249
Репутация: 22
По умолчанию

Если браузер видимый в даный момент времени, то можна просто сохранить рисунок всего экрана, а потом только вырезать интересующий тебя прямоугольник.
__________________
Не твори зла, и жизнь повернется к тебе передом
Ответить с цитированием
  #3  
Старый 06.10.2010, 10:31
MrDiG MrDiG вне форума
Начинающий
 
Регистрация: 05.10.2010
Сообщения: 112
Репутация: 1227
По умолчанию

Цитата:
Сообщение от Bars1992
Если браузер видимый в даный момент времени, то можна просто сохранить рисунок всего экрана, а потом только вырезать интересующий тебя прямоугольник.

А можно какой-нибудь пример, открывающий допустим c:\Image.jpg, вырезающий прямоугольник по координатам и сохраняющий его в c:\Image2.jpg. Что-то гугл ничего не даёт
Ответить с цитированием
  #4  
Старый 06.10.2010, 11:53
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

MrDiG, сегодня днём буду у ребят которые занимаются подобными вещами используя язык AutoIt (на самом деле это простейший WinAPI чуть-чуть причёсанный)

Делается это совершенно другим алгоритмом)
Изображение помещается в Память, находятся там координаты, очищается память из того что "не попало" в нужную тебе области, и меньше чем за 10 секунд расшифровывается запись.

Потом этот текст сохраняется в dat файл. И делай с ним дальше чё хочешь)
Просто AutoIT оптимизированн под эти нужды, а на Delphi это, если честно, очень муторно.

В общем старт я тебе дал. google решает
И вот ещё ссылочка: Функции AutoIt
Ответить с цитированием
  #5  
Старый 06.10.2010, 12:45
MrDiG MrDiG вне форума
Начинающий
 
Регистрация: 05.10.2010
Сообщения: 112
Репутация: 1227
По умолчанию

Цитата:
Сообщение от Uniq!
MrDiG, сегодня днём буду у ребят которые занимаются подобными вещами используя язык AutoIt (на самом деле это простейший WinAPI чуть-чуть причёсанный)

Делается это совершенно другим алгоритмом)
Изображение помещается в Память, находятся там координаты, очищается память из того что "не попало" в нужную тебе области, и меньше чем за 10 секунд расшифровывается запись.

Потом этот текст сохраняется в dat файл. И делай с ним дальше чё хочешь)
Просто AutoIT оптимизированн под эти нужды, а на Delphi это, если честно, очень муторно.

В общем старт я тебе дал. google решает
И вот ещё ссылочка: Функции AutoIt

Спасибо за ответ.
Я знаком с AutoIT. Но я больше предпочитаю Xweb HumanEmulator. Тем более, на последний у меня лицуха - ну нужна именно дельфа. Фактически вопрос можно перефразировать - из сохранённого на диске изображения A вырезать кусок задав четыре точки в CopyRect и сохранить полученное как файл B.
Ответить с цитированием
  #6  
Старый 06.10.2010, 15:24
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

Что мне сегодня удалось выяснить.
Графирование(не знаю что это, по контексту понятно дальше будет)любых объектов необходимо выполнять в пиксельном формате. Т.е. jpeg вариант - не вариант.

Любой алгоритм "распознавания" построенн на составлении пиксельнойматрицы. Т.е. картинку вашу надо перевести в Матрицу 16ых цветов вида 0х123456.

Т.к. делфи "грустно" справляется с jpeg стандартными средствами, то это "ограничение" даже на руку для нас.

Функция неплохо описана в helpe.
Что касается работы с ней можно я думаю "нагуглить"
Домой доберусь(щас на работе) попробую помочь. Ибо вопрос для собственного локального развития мне интересен.

P.S В своё время писал ботов под World Of Warcraft. Но я там работал только с TStream не используя jpeg или bmp
Ответить с цитированием
  #7  
Старый 06.10.2010, 16:42
Asinkrit Asinkrit вне форума
Местный
 
Регистрация: 29.10.2009
Сообщения: 446
Репутация: 271
По умолчанию

Возможно здесь найдутся для тебя ответы
Ответить с цитированием
  #8  
Старый 06.10.2010, 16:56
MrDiG MrDiG вне форума
Начинающий
 
Регистрация: 05.10.2010
Сообщения: 112
Репутация: 1227
По умолчанию

Спасибо, огромное за пример. Обязательно посмотрю. А для своей задачи - решение я нашёл. Топик исчерпан.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 16:07.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025