Bild (IHTMLImgElement) mittels WebClient herunterladen

// für "mshtml.IHTMLImgElement" unter Projekt->Verweise->Verweis hinzufügen->COM->Microsoft HTML Object Library hinzufügen
// benötigt wird außerdem ein WebBrowser-Steuerelement
//
// Aufruf:
// HtmlElement el = webBrowser.Document.All[0];
// mshtml.IHTMLImgElement htmImg = el.DomElement as mshtml.IHTMLImgElement;
// if (htmImg != null)
// {
//     if (DownloadImage(htmImg, @"c:\Bilder\12345.png", ImageFormat.Png)
//     {
//         // irgendwas machen
//     }
// }

private bool DownloadImage(mshtml.IHTMLImgElement el, string sFileName, ImageFormat format)
{
    bool bRetVal = false;

    try
    {
        // WebClient für Download erzeugen
        WebClient client = new WebClient();
        // Stream an der Adresse "el.href" herunterladen
        Stream stream = client.OpenRead(el.href);

        // Stream an Bitmap übergeben und im übergebenen Format speichern
        Bitmap bitmap = new Bitmap(stream);
        bitmap.Save(sFileName, format);
        bitmap.Dispose();

        // aufräumen
        stream.Flush();
        stream.Close();
        stream.Dispose();

        client.Dispose();

        bRetVal = true;
    }
    catch (Exception e)
    {
        MessageBox.Show(e.Message);
    }

    return bRetVal;
}

Alle Bilder (IHTMLImgElement) eines HtmlDocument ermitteln

// für "mshtml.IHTMLImgElement" unter Projekt->Verweise->Verweis hinzufügen->COM->Microsoft HTML Object Library hinzufügen
// benötigt außerdem ein WebBrowser-Steuerelement
//
// Aufruf:
// List<mshtml.IHTMLImgElement-> lImages = GetImagesFromDocument(webBrowser.Document);

private List<mshtml.IHTMLImgElement-> GetImagesFromDocument(HtmlDocument doc)
{
    // Liste mit Bildern
    List<mshtml.IHTMLImgElement-> foundimages = new List<mshtml.IHTMLImgElement->();

    // alle HtmlElemente des Dokumentes durchgehen
    for (int i = 0; i < doc.All.Count; i++)
    {
        HtmlElement el = doc.All[i];

        if (el != null)
        {
            // akt. Html-Element versuchsweise zu IHTMLImgElement wandeln
            mshtml.IHTMLImgElement htmImg = el.DomElement as mshtml.IHTMLImgElement;

            // und prüfen
            if (this.IsImage(htmImg)) foundimages.Add(htmImg);
        }
    }

    return foundimages;
}

// Hilfsfunktion, um zu prüfen, ob ein IHTMLImgElement auch ein gültiges Image ist
private bool IsImage(mshtml.IHTMLImgElement htmImg)
{
    bool bRetVal = false;

    if (htmImg != null)
    {
        if (!string.IsNullOrEmpty(htmImg.fileSize))
        {
            // images mit filesize -1 sind fehlerhaft, deswegen rausfiltern
            if (int.Parse(htmImg.fileSize) -> 0)
            {
                if (!string.IsNullOrEmpty(htmImg.mimeType))
                {
                    bRetVal = true;
                }
            }
        }
    }

    return bRetVal;
}