Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка под ASP.NET > Динамические изображения в Web Control


Автор: VeryWell 30.7.2009, 14:51
Приветствую всех!
Задача:
Необходимо создать контрол, который будет программно генерировать картинку содержащую какой-то текст и выводить её на страницу в виде контрола, т.е. добавлять картинку к имеещимуся контенту на странице.

Сложности:
Использование инструментов GDI предусматривает создание Bitmap или Image, которые не усваиваются контролом Image. Вообще контрол предусматривает получение картинки по Url. Возможно необходимо как-то использовать (HTML)Placeholder как контейнер для изображения, но информации о чем-либо подобном в сети я не нашел. С другой стороны, возможно необходимо перехватывать одно из событий жизненного цикла ASP страницы и как-то правильно обрабатывать в ручную, но и по этому вопросу кроме общей теории на msdn ничего не нашел.
Варианты с сохранением картинки где-либо, а потом использование ссылке на неё не подходят. Испозльзование страниц обработчиков ashx тоже не подходят.

Вопрос традиционный:
Как?  smile

Автор: Bestoloch 31.7.2009, 14:25
 smile http://msdn.microsoft.com/ru-ru/library/system.web.ui.page_events.aspx

Автор: VeryWell 31.7.2009, 15:03
To Bestoloch. Спасибо что не отослали на Википедию =)

Решение проблемы найдено. поже отпишусь подробнее. Всем пасибо за просмотры  smile 

Автор: VeryWell 31.7.2009, 15:24
To Bestoloch. Спасибо что не отослали на Википедию =)

Решение проблемы найдено. поже отпишусь подробнее. Всем пасибо за просмотры  smile

Добавлено через 11 минут и 5 секунд
To Bestoloch. Спасибо что не отослали на Википедию =)

Решение проблемы найдено. поже отпишусь подробнее. Всем пасибо за просмотры  smile 

Автор: VeryWell 7.8.2009, 18:01
Итак отвечаю...
Рабочая идея заключается в следующем: 
В контроле описываются методы, с помощью которого рисуется картинка и выводится в поток. http://archive.devnewz.com/devnewz-3-20040126DevelopingaHitCounterinASPNET.html Затем в контроле при выводе картинки ссылаетесь на этот же контрол:
Код

string url=Page.Request.Path;

Осталось только помочь контролу определить, когда браузер генерирует HTML-код для отображения страницы и когда генерируется код для прорисовки вашего изображения в контроле. Для этого необходимо сопроводить запрос на загрузку картинки соответствующим контентом:
Код

writer.Write(@"<img src=""" + url + @"?image=ourImageID"">");

,где ourImageID - индефикатор по которому будет отлавливаться среди всех запросов именно запрос на отрисову картинки.
И последнее необходимо переопределить метод RenderControl и OnInit:
Код

bool IsImage = false;

protected override void OnInit(EventArgs e)
{
    string ImageID = Request.QueryString["image"];
    if ((!String.IsNullOrEmpty(ImageID)) && (0 == ImageID.CompareTo("ourImageID")))
    {
        IsImage = true;
    }

    base.OnInit(e);
}

public override void RenderControl(HtmlTextWriter writer)
{
    if (IsImage)
    {
        //Это функция из примера по ссылке:
        //http://archive.devnewz.com/devnewz-3-20040126DevelopingaHitCounterinASPNET.html
        DrawCounterValue();
    }
    else
    {
        string url = Page.Request.Path;
        writer.Write(@"<img src=""" + url + @"?image=ourImageID"">");
    }
}


Всем удачного кодинга.
Если сообщение кажется полезным - отблагодарите тыканием в известные места =)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)