Изображения из SQL Server Столбец изображений JPG / PNG, не являющийся типом, преобразованным в растровое изображение в HttpHandlers (используется клиентом Silverlight) - PullRequest
0 голосов
/ 31 марта 2010

Наш клиент Silverlight 3.0 успешно использует изображения, сохраненные / извлеченные в файловой системе ASP.NET HttpHandlers.

Мы пытаемся сохранять и считывать изображения с использованием базы данных SQL Server 2008. Пожалуйста, найдите урезанный код, вставленный ниже с исключением. «Растровое изображение неверно»

   //Store document to the database
   private void SaveImageToDatabaseKK(HttpContext context, string pImageFileName)
   {
        try
        {
            //ADO.NET Entity Framework
            ImageTable documentDB = new ImageTable();

            int intLength = Convert.ToInt32(context.Request.InputStream.Length);

            //Move the file contents into the Byte array
            Byte[] arrContent = new Byte[intLength];
            context.Request.InputStream.Read(arrContent, 0, intLength);

            //Insert record into the Document table
            documentDB.InsertDocument(pImageFileName, arrContent, intLength);
        }
        catch 
        {
        }
    }

= Метод чтения строки из таблицы и ее отправки ниже. =

 private void RetrieveImageFromDatabaseTableKK(HttpContext context, string pImageName)
    {
        try
        {
            ImageTable documentDB = new ImageTable();                          
            var docRow = documentDB.GetDocument(pImageName); //based on Imagename which is unique
            //DocData column in table is **Image**
            if (docRow!=null && docRow.DocData != null && docRow.DocData.Length > 0)
            {
                Byte[] bytImage = docRow.DocData;
                if (bytImage != null && bytImage.Length > 0)
                {
                    Bitmap newBmp = ConvertToBitmap(bytImage );
                    if (newBmp != null)
                    {
                        newBmp.Save(context.Response.OutputStream, ImageFormat.Jpeg);
                        newBmp.Dispose();
                    }
                }
            }
        }
        catch (Exception exRI)
        {

        }
    }

    // Convert byte array to Bitmap (byte[] to Bitmap)
    protected Bitmap ConvertToBitmap(byte[] bmp)
    {
        if (bmp != null)
        {
            try
            {

            TypeConverter tc = TypeDescriptor.GetConverter(typeof(Bitmap));
            Bitmap b = (Bitmap)tc.ConvertFrom(bmp); **//This is where the Exception Occurs.**
            return b;
            }
            catch (Exception)
            {

            }
        }
        return null;
    }

1 Ответ

0 голосов
/ 31 марта 2010

Попробуйте прочитать изображение из MemoryStream вместо использования TypeConverter:

public Bitmap GetBitmapFromByteArray(byte[] bmp)
{
   System.IO.MemoryStream ms = new System.IO.MemoryStream(bmp);
   Bitmap btMap = (Bitmap)System.Drawing.Image.FromStream(ms);
   ms.Close();

   return btMap;
}
...