views:

231

answers:

1

Our Silverlight 3.0 Client consumes Images stored/retrieved on the File System thorough ASP.NET HttpHandlers successfully.

We are trying to store and read back Images using a SQL Server 2008 Database. Please find the stripped down code pasted below with the Exception. "Bitmap is not Valid"

   //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 
        {
        }
    }

=The method to Read Back the Row from the Table and Send it back is below.=

 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;
    }
A: 

Try reading the image from a MemoryStream rather than using the 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;
}
routeNpingme
@routeNpingme Sorry it game me the same error/Exception. Additionally I have another question which I am posting now.
kanchirk
@routeNpingme the Exception was "Parameter is not valid."
kanchirk
@routeNPingme It was discovered to be a Storage Issue. Thanks for your help.
kanchirk