![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() TChromium как получить скриншот сайта ?
есть такой код: Код:
var bmp: TBitMap; begin bmp:=TBitMap.Create; CefGetBitmap(Chromium1.Browser, PET_VIEW, bmp); bmp.SaveToFile('c:\123.bmp'); end; вроде логично, НО получаеться картинка с искажениями, ничего не видно. Функция CefGetBitmap прописана в ceflib.pas, которая ставиться вместе с TCromuim. Прочитал на одном форуме что помогло обновление версии, но у меня последняя. Предыдущую версию пока не пробывал. ссылка на картинку: http://imglink.ru/show-image.php?id=...7d8cd8ecaaa963 |
#2
|
|||
|
|||
![]() пробывал в:
- Win7 + XE2 + dcef-r306.7z - WinXp + XE2 + dcef-r306.7z или dcef-r231.7z или dcef-r275.7z тоже самое |
#3
|
||||
|
||||
![]() Скачал, установил, посмотрел.
На первый взгляд картина действительно битая, но только на первый. Заходим отладчиком в функцию CefGetBitmap и доходим до строки s := p. После чего смотрим что сохранилось в буфер. Странно, но битмап сохранился не полностью. В моём случае: одна строка нормально, потом несколько пропущено (одни нули), потом ещё строка нормальная, опять несколько пропущено и т.д. Выходит browser.GetImage(typ, w, h, p) косячит, но почему? Может кто-нибудь ещё предположения выскажет. Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#4
|
|||
|
|||
![]() всётаки версия dcef-r306.7z глючит работа со скриншотами. Ещё раз поставил dcef-r231.7z всё заработало. Использую код:
Код:
function CefGetBitmap(const browser: ICefBrowser; typ: TCefPaintElementType; Bitmap: TBitmap): Boolean; var w, h, i: Integer; p, s: Pointer; begin browser.GetSize(typ, w, h); Bitmap.PixelFormat := pf32bit; {$IFDEF DELPHI12_UP} Bitmap.SetSize(w, h); {$ELSE} Bitmap.Width := w; Bitmap.Height := h; {$ENDIF} GetMem(p, h * w * 4); try Result := browser.GetImage(typ, w, h, p); s := p; for i := 0 to h - 1 do begin Move(s^, Bitmap.ScanLine[i]^, w*4); Inc(Integer(s), w*4); end; finally FreeMem(p); end; end; инструмент: WinXP + Delphi XE2 Последний раз редактировалось Admin, 09.09.2012 в 19:40. |