2012-02-23 4 views
0

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

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

ответ

1

Там две опции здесь:

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

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

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

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

0

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

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

Edit: Смотрите следующие How to bind a MemoryStream to asp:image control?

0

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

Вы должны сообщить собранию, что ресурс существует, используя атрибут WebResource:

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

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

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

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