Używam WebKit.NET do integracji komponentu przeglądarki w mojej aplikacji C#. Problem polega na tym, że mogę uchwycić widoczną część w oknie przeglądarki za pomocą zrzutu ekranu. Czy istnieje sposób na przechwycenie zrzutu ekranu całej strony?Jak zrobić zrzut ekranu z pełną witryną za pomocą C# i WebKit.NET?
Odpowiedz
Wydaje się, że jest to rodzaj możliwe dzięki zastosowaniu NativeMethods.SendMessage, chociaż może to zepsuć kolejkę komunikatów, można użyć http://cutycapt.sourceforge.net/ czy może http://iecapt.sourceforge.net/ lub http://labs.awesomium.com/capturing-web-pages-with-c-net/?
Używam zamiast tego WebBrowser; ScrollBarsEnabled = false
pozwól mi przechwycić całą stronę.
Oto kod:
protected override void Render(HtmlTextWriter writer)
{
StringBuilder builder = new StringBuilder();
HtmlTextWriter htw = new HtmlTextWriter(new StringWriter(builder));
base.Render(htw);
string html = builder.ToString();
_Generate(html);
}
private void _Generate(string html)
{
var browser = new WebBrowser { ScrollBarsEnabled = false };
DisplayHtml(html, browser);
browser.DocumentCompleted += WebBrowser_DocumentCompleted;
while (browser.ReadyState != WebBrowserReadyState.Complete)
Application.DoEvents();
browser.Dispose();
}
private void DisplayHtml(string html, WebBrowser browser)
{
browser.Navigate("about:blank");
if (browser.Document != null)
{
browser.Document.Write(string.Empty);
}
browser.DocumentText = html;
}
Natknąłem się na kilka rozwiązań za pomocą składnika WebBrowser, ale jestem zainteresowany wykorzystaniem silnika WebKit do przechwytywania go. – topless
Spróbuj to:
using System.IO;
using System.Drawing;
using System.Drawing.Imaging;
using System.Threading;
using System.Windows.Forms;
public byte[] picbytes;
private void capture_Click(object sender, EventArgs e)
{
makepicture(txtURL.Text.Trim());
pictureBox1.Visible = true;
pictureBox1.Image = ByteToImage(picbytes);
}
private void makepicture(string url)
{
Thread thread = new Thread(delegate()
{
using (WebBrowser browser = new WebBrowser())
{
browser.ScrollBarsEnabled = false;
browser.AllowNavigation = true;
browser.Navigate(url);
browser.Width = 1024;
browser.Height = 1575;
browser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(DocumentCompleted);
while (browser.ReadyState != WebBrowserReadyState.Complete)
{
System.Windows.Forms.Application.DoEvents();
}
}
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();
}
private void DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
WebBrowser browser = sender as WebBrowser;
using (Bitmap bitmap = new Bitmap(browser.Width, browser.Height))
{
browser.DrawToBitmap(bitmap, new System.Drawing.Rectangle(0, 0, browser.Width, browser.Height));
using (MemoryStream stream = new MemoryStream())
{
bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
byte[] bytes = stream.ToArray();
picbytes = bytes;
}
}
}
public static Bitmap ByteToImage(byte[] blob)
{
MemoryStream mStream = new MemoryStream();
byte[] pData = blob;
mStream.Write(pData, 0, Convert.ToInt32(pData.Length));
Bitmap bm = new Bitmap(mStream, false);
mStream.Dispose();
return bm;
}
Czy możesz podać wcięcie swojego kodu? ("Edytuj", wybierz wszystko, Ctrl-k). Dzięki. – byako
Działa to doskonale, z jedną skazą. Naprawdę potrzebujesz znać wymiary, aby ustawić kontrolę przeglądarki, ponieważ wydrukuje tylko to, co jest w środku. Domyślam się, że jest to teraz szukanie, jak określić szerokość i wysokość strony internetowej. – Switch
w DocumentCompleted() dodaj następujące, zaraz po utworzeniu obiektu przeglądarki. int height = browser.Document.Body.ScrollRectangle.Height; int width = browser.Document.Body.ScrollRectangle.Width; browser.Height = height; browser.Width = width; – Switch
- 1. jak zrobić zrzut ekranu?
- 2. perl Gtk2 :: WebKit: jak zrobić zrzut ekranu na pełną stronę
- 3. C#: jak zrobić zrzut części ekranu
- 4. Jak zrobić zrzut ekranu z części UIView?
- 5. Jak programowo zrobić zrzut ekranu iPhone/iPad z Xamarin.iOS (C#)?
- 6. Jak zrobić zrzut ekranu pod Waylandem?
- 7. jak programowo zrobić zrzut ekranu i zapisać go w galerii?
- 8. Jak programować zrzut ekranu?
- 9. Jak zrobić zrzut ekranu z bieżącej strony internetowej za pomocą javascript/jquery
- 10. Zrzut ekranu z filmem HTML5 na płótnie za pomocą CORS
- 11. Jak zrobić zrzut ekranu z klipu wideo 50 minut w klipie i zrobić to szybko?
- 12. Wykonanie zrzutu ekranu za pomocą C \ GTK
- 13. Zrzut ekranu okna z pytonem:
- 14. Jak zrobić zrzut ekranu części serwisu Google Maps? JavaScript
- 15. Zrzut ekranu w Haskell?
- 16. Android wykonuje zrzut ekranu
- 17. Jak zrobić zrzut ekranu całej strony w Kątomierzu?
- 18. Jak zrobić zrzut ekranu pojedynczego elementu HTML w rozszerzeniu Chrome?
- 19. Opóźnienie zrzut ekranu iOS
- 20. Zrzut ekranu z kamery internetowej
- 21. Zrzut ekranu ignoruje niektóre okna
- 22. Zrzuty ekranu za pomocą PhantomJS w języku C#
- 23. Uzyskaj zrzut ekranu określonej aplikacji
- 24. Czy można zrobić zrzut ekranu widoku bez wyświetlania widoku?
- 25. Zrzut ekranu z pełnoekranowym programem DX11 za pomocą SharpDX i EasyHook
- 26. Jak zrobić zrzut ekranu na Raspberry Pi z systemem Debian Squeeze i LXDE?
- 27. Zrzut ekranu pokazuje czarny
- 28. Zyskaj zrzut ekranu na Windowsie z Pythonem?
- 29. Zrzut ekranu z całego ekranu przy użyciu html5/javascript?
- 30. Jak zrobić wybór obszaru ekranu, rysując na pulpicie, aby wykonać zrzut ekranu?
można pisać kod? –
@EmanueleGreco Nie, niestety nie, ale jutro przyjrzę się, jeśli uda mi się wydobyć jego minimalną wersję do celów demonstracyjnych. – topless
Myślę, że pójdę z rozwiązaniem awesomium, ponieważ zapewnia warstwę pośrednią do wstrzykiwania kodu JavaScript również, co jest bardzo wygodne dla moich przyszłych planów. – topless