2016-05-11 3 views
0

Я использую метод захвата экрана в своих руках C#. В местном проекте все работает нормально. Но когда я публикую свое приложение для живого домена, я получаю черный снимок экрана.Получение черного экрана с использованием метода захвата экрана в C#

Я использую ниже двух способов активного окна экрана захвата 1) http://www.tutorialized.com/tutorial/How-to-capture-web-page-screenshot-in-asp.net-using-c/67952 2) http://www.c-sharpcorner.com/article/screen-capture-and-save-as-an-image/

выше методы работает хорошо в локальном проекте. Но после публикации снимка экрана сохраняется на диске, но с черным цветом (пустой).

Ваши ответы будут оценены.

+1

У вас проблема с XY. Вы не можете и не должны делать скриншоты браузера с сервера. Почему вы пытаетесь это сделать? – CodeCaster

+0

На моей странице с одним iframe. и iframe, поступающих с стороннего сайта. У меня нет никакого контроля в кадре, только я могу добавлять значения в некоторый элемент управления. поэтому для моего журнала я хочу захватить добавленную стоимость и сохранить ее как изображение. теперь скажите мне, что это лучший способ сделать это из приложения mvc. вы также можете прочитать ниже ответы на комментарии для получения дополнительных разъяснений. –

+0

Да, я понимаю, что вы пытаетесь сделать (сделайте снимок экрана), но не _why_. Насколько нам известно, вы пытаетесь сделать снимок экрана платежного шлюза, чтобы получить доступ к информации, доступ к которой вы не можете или не должны получить. Правильным решением было бы добавить некоторые идентификаторы в запрос поставщику платежей, который они, в свою очередь, вернутся в свой обратный вызов. Или что угодно. Пожалуйста, объясните, почему вы пытаетесь сделать снимок экрана, поэтому другие могут предложить более разумный подход к решению этой проблемы. – CodeCaster

ответ

8

Проекты предназначены для использования в среде рабочего стола, а не на веб-странице (проект по первой ссылке является абсолютно неправильным!).

Вы получаете черный экран, потому что вы захватываете экран, на котором работает приложение, поэтому вы получаете экран сервера, и если пользователь не зарегистрирован, экран черный!

Вы не можете использовать этот код для захвата экрана удаленного веб-клиента.

пытаются использовать элемент управления 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); 
     } 
    } 
} 
+0

Giox спасибо за ваш ответ. Итак, можете ли вы предложить мне способ захвата текущего окна экрана с помощью веб-приложения (mvc). Я также попробую с html2canvas. его также отлично работает .., но не поддерживает его iframe. –

+0

попробуйте код, отправленный в редактировании, это не MVC, поскольку я не очень хорош в этом, но вы можете легко преобразовать его. – Giox

+0

Еще одна вещь в моем веб-приложении. Я делаю много вещей с ajax .. так что если я передаю URL-адрес, тогда это не сработает для меня. потому что я потеряю значение, если страница перезагрузится. Поэтому я хочу, чтобы какой-либо дисплей на текущем экране он должен был захватывать, используя мой новый вызов ajax. –

1

Фактический вопрос, кажется, «как я могу сделать снимок экрана используя Javascript "? Об этом уже ответили в предыдущем вопросе SO, Using HTML5/Canvas/JavaScript to take screenshots. Ответ использует библиотеку html2canvas для чтения DOM страницы и рендеринга изображения с помощью Canvas.

Следующий код, например, будет фиксировать текущую страницу и опубликовать результат на дне страницы:

html2canvas(document.body, { 
    onrendered: function(canvas) { 
    document.body.appendChild(canvas); 
    } 
}); 

Оказывать другой элемент, передать его html2canvas вместо document.body:

html2canvas(someElement,...); 

Предоставление IFRAME, хотя может быть проблемой, потому что его содержимое не часть страницы и, следовательно, DOM. Javascript просто не имеет доступа к его содержимому. Это answered in this SO question и упоминается как ограничение html2canvas.

Смежные вопросы