Пользовательский серверный элемент для вставки изображения - PullRequest
0 голосов
/ 23 февраля 2012

Я создал пользовательский серверный элемент управления и пытаюсь добавить изображение с помощью System.Web.UI.WebControls.Image. Я хотел бы использовать изображение из памяти потока или растрового изображения. Как я могу это сделать, кажется, WebControls.Image требует ImageURL.

У меня нет статического изображения, оно создается на лету. Спасибо.

Ответы [ 3 ]

1 голос
/ 23 февраля 2012

Здесь есть два варианта:

  1. Подать изображение по второму запросу
  2. Кодировать изображение на странице

Первый вариант является наиболее распространенным и настоятельно рекомендуется, если размер вашего изображения превышает несколько килобайт. Вы бы реализовали HttpHandler, который возвращает поток сгенерированного изображения. На вашей странице установите ImageUrl на странице в URL, указывающий на ваш обработчик. Вы можете включить данные в URL-адрес изображения, чтобы указать обработчику, как визуализировать изображение или какие данные использовать.

Вы должны понимать, что любой может вызвать этот обработчик, поэтому, если ваши изображения содержат конфиденциальную или личную информацию, обязательно проверьте, авторизован ли запрос.

Второй вариант заключается в кодировании изображения в виде данных base64 непосредственно на вашу страницу. Поскольку кодировка base64 увеличивает размер данных на 137% , она подходит только для небольших изображений. Вы также не получите никакой поддержки от стандартных серверных элементов управления, поэтому мне придется реализовать это с нуля.

0 голосов
/ 23 февраля 2012

Я полагаю, что вам лучше всего установить для изображения Build Action значение Embedded Resource и использовать ClientScript.RegisterClientScriptResource для регистрации изображения на странице

Необходимо сообщить сборке, что ресурс существует, используя атрибут WebResource:

[assembly:WebResource("namespace.images.file.jpg", "image/jpg")]

Встраивая ресурс, вы также сможете читать содержимое изображения в виде потока:

typeof(yourClass).Assembly.GetManifestResourceStream("namespace.images.file.jpg");

но вы никак не можете вставить изображение в конвейер, не используя HttpHandler, как упоминалось выше

0 голосов
/ 23 февраля 2012

Я не думаю, что это возможно из-за контроля изображения. Что вы можете сделать, это реализовать собственный обработчик ashx, который будет генерировать изображение на лету и записывать его в поток ответов. Тогда вы могли бы сделать что-то вроде

Image.ImageUrl="~/ImageHandler.ashx?name=myimage"

Редактировать: см. Следующее Как связать MemoryStream с asp: control image?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...