C# WebBrowser и картинки
Янв 25th, 2010 by Umax
Загрузить информацию в компонент WebBrowser можно несколькими способами. Первый – это воспользоваться методом Navigate, этот метод хорош, если не нужно делать преобразования на странице, которую вы загружаете. Компонент WebBrowser имеет очень ограниченные возможности. Если нужно скачать страницу, обработать ее и только после этого отобразить, то придется потанцевать с бубном.
Итак, что нужно чтобы заставить этот компонент отображать то, что мы хотим. Можно воспользоваться свойством DocumentText, которое позволяет записать данные, но тут возникают другие проблемы. Ни для кого не секрет, что в обычных HTML-страницах много картинок, однако, если записать в DocumentText строку с HTML-страницей, то не будут загружаться ни таблицы стилей ни картинки, если с таблицами стилей можно кое-как решить проблему, интегрировав их в саму страницу, то с картинками дело обстоит хуже.
Однако решение этой проблемы такое же как со стилями – нужно все картинки внедрить в страницу. Это можно сднлать, если перекодировать картинки в Base64.
Перекодировать картинки можно с помощью этого метода:
Using System.IO;
public string ImageToBase64(Image image, System.Drawing.Imaging.ImageFormat format)
{
using (MemoryStream ms = new MemoryStream())
{
// Convert Image to byte[]
image.Save(ms, format);
byte[] imageBytes = ms.ToArray();
// Convert byte[] to Base64 String
string base64String = Convert.ToBase64String(imageBytes);
return base64String;
}
}
В странице, вместо, например src="img.jpg" писать следующее src="data:image/jpg;base64,[base64content]" где base64content – строка, которую возратил метод ImageToBase64.
Таким сложным путем удается сделать то, что хочется.