Проекты предназначены для использования в среде рабочего стола, а не на веб-странице (проект по первой ссылке является абсолютно неправильным!).
Вы получаете черный экран, потому что вы захватываете экран, на котором работает приложение, поэтому вы получаете экран сервера, и если пользователь не зарегистрирован, экран черный!
Вы не можете использовать этот код для захвата экрана удаленного веб-клиента.
пытаются использовать элемент управления WebBrowser, а и вынести результат на растровом изображении:
<asp:TextBox ID="txtUrl" runat="server" Text = "" />
<asp:Button Text="Capture" runat="server" OnClick="Capture" />
<br />
<asp:Image ID="imgScreenShot" runat="server" Height="300" Width="400" Visible = "false" />
фоновым кодом:
using System.IO;
using System.Drawing;
using System.Threading;
using System.Windows.Forms;
protected void Capture(object sender, EventArgs e)
{
string url = txtUrl.Text.Trim();
Thread thread = new Thread(delegate()
{
using (WebBrowser browser = new WebBrowser())
{
browser.ScrollBarsEnabled = false;
browser.AllowNavigation = true;
browser.Navigate(url);
browser.Width = 1024;
browser.Height = 768;
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 Rectangle(0, 0, browser.Width, browser.Height));
using (MemoryStream stream = new MemoryStream())
{
bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
byte[] bytes = stream.ToArray();
imgScreenShot.Visible = true;
imgScreenShot.ImageUrl = "data:image/png;base64," + Convert.ToBase64String(bytes);
}
}
}
У вас проблема с XY. Вы не можете и не должны делать скриншоты браузера с сервера. Почему вы пытаетесь это сделать? – CodeCaster
На моей странице с одним iframe. и iframe, поступающих с стороннего сайта. У меня нет никакого контроля в кадре, только я могу добавлять значения в некоторый элемент управления. поэтому для моего журнала я хочу захватить добавленную стоимость и сохранить ее как изображение. теперь скажите мне, что это лучший способ сделать это из приложения mvc. вы также можете прочитать ниже ответы на комментарии для получения дополнительных разъяснений. –
Да, я понимаю, что вы пытаетесь сделать (сделайте снимок экрана), но не _why_. Насколько нам известно, вы пытаетесь сделать снимок экрана платежного шлюза, чтобы получить доступ к информации, доступ к которой вы не можете или не должны получить. Правильным решением было бы добавить некоторые идентификаторы в запрос поставщику платежей, который они, в свою очередь, вернутся в свой обратный вызов. Или что угодно. Пожалуйста, объясните, почему вы пытаетесь сделать снимок экрана, поэтому другие могут предложить более разумный подход к решению этой проблемы. – CodeCaster