目前项目中用到,上传图片后,如果是gif的图片则转换为jpg格式存储在数据库中(存的是byte[]的)。 以下是我的代码,始终得不到期望数据.
说明:ObjectStream 是保证正确的图片流.以下代码获取的都是同一个ObjectStream.1.
(这样出来的jpg是正确的,没问题)
Image myImg =Image.FromStream(ObjectStream);
myImg.Save(@"D:\\13.jpg",System.Drawing.Imaging.ImageFormat.Jpeg);
-----------------------------------------------------------------
//以下代码,读出来的FileByte全部为0).
Image myImg =Image.FromStream(ObjectStream);
MemoryStream ms = new MemoryStream();
myImg.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);
ms.Read(FileByte, 0, FileLength); //读取图象文件数据
ms.Close();2.
//以下代码也读不出正确的byte[],和上面一样,FileByte全部为0
System.Drawing.Imaging.FrameDimension ImgFrmDim = new System.Drawing.Imaging.FrameDimension(myImg.FrameDimensionsList[0]);
int nooffrm = myImg.GetFrameCount(ImgFrmDim);
MemoryStream ms = new MemoryStream();
for (int i = 0; i < nooffrm; i++)
{
    myImg.SelectActiveFrame(ImgFrmDim, i);
    myImg.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
 }
ms.Read(FileByte, 0, FileLength); //读取图象文件数据
ms.Close();
求个解决办法,谢谢了

解决方案 »

  1.   

    FileByte 在哪赋值的?gif和jpg的图象格式不一样,你这样都直接format成jpeg肯定会有问题的
      

  2.   

    private byte[] GetByteFromImage(Image inputimage)
            {
                byte[] byteImage = new byte[0];
                using (MemoryStream ms = new MemoryStream())
                {
                    try
                    {
                        Bitmap bitmap = new Bitmap(inputimage);
                        GraphicsUnit gu = GraphicsUnit.Pixel;
                        RectangleF rectf = inputimage.GetBounds(ref gu);
                        Rectangle rect = new Rectangle((int)rectf.X, (int)rectf.Y, (int)rectf.Width, (int)rectf.Height);
                        System.Drawing.Imaging.BitmapData bd = bitmap.LockBits(rect, 
                            System.Drawing.Imaging.ImageLockMode.ReadOnly, bitmap.PixelFormat);
                        bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
                        byteImage = ms.ToArray();
                        bitmap.UnlockBits(bd);
                    }
                    catch (Exception ex)
                    {
                    }
                }            return byteImage;
            }
      

  3.   

    ms MemoryStream不是这么存的 我找下代码
      

  4.   

    代码找不到了,MemoryStream最好直接用byte[]去构造
      

  5.   

    myImg.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);
    ms.Position=0;//加上这句试试。
    ms.Read(FileByte, 0, FileLength); //读取图象文件数据
      

  6.   

    ms.Position = 0;
    ----------------
    这句精辟~~~加了就OK了汗~。