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); //读取图象文件数据
------解决方案--------------------这个问题,见过好多次了