![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() В 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
|
||||
|
||||
![]() Если браузер видимый в даный момент времени, то можна просто сохранить рисунок всего экрана, а потом только вырезать интересующий тебя прямоугольник.
Не твори зла, и жизнь повернется к тебе передом ![]() |
#3
|
|||
|
|||
![]() Цитата:
А можно какой-нибудь пример, открывающий допустим c:\Image.jpg, вырезающий прямоугольник по координатам и сохраняющий его в c:\Image2.jpg. Что-то гугл ничего не даёт ![]() |
#4
|
||||
|
||||
![]() MrDiG, сегодня днём буду у ребят которые занимаются подобными вещами используя язык AutoIt (на самом деле это простейший WinAPI чуть-чуть причёсанный)
Делается это совершенно другим алгоритмом) Изображение помещается в Память, находятся там координаты, очищается память из того что "не попало" в нужную тебе области, и меньше чем за 10 секунд расшифровывается запись. Потом этот текст сохраняется в dat файл. И делай с ним дальше чё хочешь) Просто AutoIT оптимизированн под эти нужды, а на Delphi это, если честно, очень муторно. В общем старт я тебе дал. google решает И вот ещё ссылочка: Функции AutoIt |
#5
|
|||
|
|||
![]() Цитата:
Спасибо за ответ. Я знаком с AutoIT. Но я больше предпочитаю Xweb HumanEmulator. Тем более, на последний у меня лицуха - ну нужна именно дельфа. Фактически вопрос можно перефразировать - из сохранённого на диске изображения A вырезать кусок задав четыре точки в CopyRect и сохранить полученное как файл B. |
#6
|
||||
|
||||
![]() Что мне сегодня удалось выяснить.
Графирование(не знаю что это, по контексту понятно дальше будет)любых объектов необходимо выполнять в пиксельном формате. Т.е. jpeg вариант - не вариант. Любой алгоритм "распознавания" построенн на составлении пиксельнойматрицы. Т.е. картинку вашу надо перевести в Матрицу 16ых цветов вида 0х123456. Т.к. делфи "грустно" справляется с jpeg стандартными средствами, то это "ограничение" даже на руку для нас. Функция неплохо описана в helpe. Что касается работы с ней можно я думаю "нагуглить" Домой доберусь(щас на работе) попробую помочь. Ибо вопрос для собственного локального развития мне интересен. P.S В своё время писал ботов под World Of Warcraft. Но я там работал только с TStream не используя jpeg или bmp |
#7
|
|||
|
|||
![]() |
#8
|
|||
|
|||
![]() Спасибо, огромное за пример. Обязательно посмотрю. А для своей задачи - решение я нашёл. Топик исчерпан.
|