Неправильный класс изображения, используемый во время приведения;как мне сделать это правильно? - PullRequest
1 голос
/ 25 июня 2011

Публичное изображение Image {get;задавать;}

Image=(Image)randomImageFromCommentsClass.Image;

Я получаю это:

Невозможно преобразовать System.Drawing.Image в System.Web.UI.WebControls

Я думаю, что импортировал неправильное пространство имен (System.Drawing) .. Это может быть ошибкой.Я пытаюсь преобразовать тип изображения из базы данных в объект изображения.

public class Comments
{
  public Image Image { get; set; }
      Image = DBNull.Value.Equals(dr["Avatar"]) ? null: (Image)dr["Image"];

Это свойство изображения выше из другого файла кода класса в Visual Studio 2010.

Каким-то образом каст не удался .. как мне это исправить?

Ответы [ 3 ]

0 голосов
/ 25 июня 2011

Если вы говорите о типе изображения SQL, то эти изображения хранятся в формате byte[], поэтому вам нужно будет перенести данные из базы данных в переменную byte [], а затем с помощью FileStream создать новый временный файл изображения в вашем файле. fileSystem, а затем назначьте его любому элементу управления изображением или тому, что вы хотите сделать.

Вы пытаетесь назначить изображение, хранящееся в базе данных, для управления изображениями в ASP.NET?

Я не думаю, что есть какой-либо способ конвертировать Byte [] в System.Drawing. вот решение, которое я использую:

byte[] ImageData;
string filePath = @"~\Image.jpeg";  //path or temporary Image
using (con)
{
    con.Open();
    SqlCommand getImageCmd = new SqlCommand("/* your SQL query to get Image from database*/ ", con);
    ImageData = (byte[])getImageCmd.ExecuteScalar();
    con.Close();
}
FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate);
using (fs)
{
    foreach (byte b in ImageData)
    {
        fs.WriteByte(b);
    }
    fs.Flush();
    fs.Close();
}

ImageControl.ImageUrl = "~/Image.jpeg"; // assign that temp Image to Image Control
0 голосов
/ 25 июня 2011

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

http://www.eggheadcafe.com/tutorials/aspnet/e1a14e2c-e746-4bed-a552-24c632bd2709/aspnet-inmemory-image-control-with-builtin-resizing-of-posted-file.aspx

0 голосов
/ 25 июня 2011

Определенно, вы не сможете выполнять приведение, если только объект, который вы используете, не является экземпляром другого объекта.

Вы можете преобразовать массив байтов в Image с помощью этого снипета:

 public Image byteArrayToImage(byte[] byteArrayIn){
     MemoryStream ms = new MemoryStream(byteArrayIn);
     Image returnImage = Image.FromStream(ms);
     return returnImage
}

Чтобы показать динамически созданное изображение с помощью WebControl, вам понадобится обработчик. Дополнительная информация здесь:

Обслуживание динамического содержимого с помощью обработчиков HTTP

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