2015-07-06 1 views
0

Я попытался преобразовать URL-адрес - мой код работает и работает отлично (я подозреваю, что это может быть проблема с привилегией).пытается преобразовать URL-адрес в изображение (получение черного изображения) - asp.net

Когда я запускаю сайт с помощью vs (изображение не является черным), но когда я размещаю сайт на iis (локальном/удаленном), я получаю черное изображение.

я не нашел какого-либо решения здесь или в Интернете,

public WebsiteToImage(string url, string fileName, int? with, int? height) 
    { 
     // With file 
     m_Url = url; 
     m_FileName = fileName; 
     m_With = with; 
     m_Height = height; 

    } 

    public Bitmap Generate() 
    { 
     // Thread 
     var m_thread = new Thread(_Generate); 
     m_thread.SetApartmentState(ApartmentState.STA); 
     m_thread.Start(); 
     m_thread.Join(); 
     return m_Bitmap; 
    } 

    private void _Generate() 
    { 
     var browser = new WebBrowser { ScrollBarsEnabled = false }; 
     browser.Navigate(m_Url); 
     browser.DocumentCompleted += WebBrowser_DocumentCompleted; 

     while (browser.ReadyState != WebBrowserReadyState.Complete) 
     { 
      Application.DoEvents(); 
     } 

     browser.Dispose(); 
    } 

    private void WebBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
    { 
     // Capture 
     var browser = (WebBrowser)sender; 
     browser.ClientSize = new Size(m_With == null ? browser.Document.Body.ScrollRectangle.Width : (int)m_With, m_Height == null ? browser.Document.Body.ScrollRectangle.Bottom : (int)m_Height); 
     browser.ScrollBarsEnabled = false; 
     m_Bitmap = new Bitmap(m_With == null ? browser.Document.Body.ScrollRectangle.Width : (int)m_With, m_Height == null ? browser.Document.Body.ScrollRectangle.Bottom : (int)m_Height); 
     browser.BringToFront(); 
     browser.DrawToBitmap(m_Bitmap, browser.Bounds); 

     // Save as file? 
     if (m_FileName.Length > 0) 
     { 
      // Save 
      m_Bitmap.SaveJPG100(m_FileName); 
     } 
    } 
} 
public static void SaveJPG100(this Bitmap bmp, string filename) 
    { 


     var encoderParameters = new EncoderParameters(1); 
     encoderParameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L); 


     bmp.Save(filename, GetEncoder(ImageFormat.Jpeg), encoderParameters); 



    } 

ответ

0

Вы сделали запись:

m_thread.Start(); 
m_thread.Join(); 

Таким образом, вы потеряете все «преимущества» фонового процесса, потому что вы вам нужно подождать, чтобы закончить нить, чтобы обеспечить результат ...

Существует много осложнений, которые пытаются использовать фон, работающий так, как вы использовали ... Сделать вещи si ясный и прямой. Вы заметите, что нет необходимости «оптимизировать» с фоном рабочего ...

+0

Я знаю это, но главная цитата - почему я получаю черное изображение. –

+0

Когда вы запускаете его в VS, браузер отображается, когда выполнение "browser.BringToFront();" Я уверен, что этого не произойдет при использовании IIS. Это странный способ получить снимок содержимого браузера ... – Caverna

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