日期:2014-05-19  浏览次数:20863 次

200分求---C# 转换Gif图片问题.
目前项目中用到,上传图片后,如果是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();


求个解决办法,谢谢了


------解决方案--------------------
FileByte 在哪赋值的?

gif和jpg的图象格式不一样,你这样都直接format成jpeg肯定会有问题的
------解决方案--------------------
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;
}
------解决方案--------------------
ms MemoryStream不是这么存的 我找下代码
------解决方案--------------------
myImg.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);
ms.Position=0;//加上这句试试。
ms.Read(FileByte, 0, FileLength); //读取图象文件数据

------解决方案--------------------
这个问题,见过好多次了