调整gif文件的大小,将其保存到内存中

时间:2014-10-29 15:07:46

标签: c# .net gif

我使用以下代码调整gif文件的大小。

public void Resize(int newWidth, int newHeight)
{
    var dimension = new FrameDimension(_image.FrameDimensionsList[0]);
    var frameCount = _image.GetFrameCount(dimension);

        // load frames
    var encoder = new GifBitmapEncoder();
    for (var i = 0; i < frameCount; ++i)
    {
        _image.SelectActiveFrame(dimension, i);
        encoder.Frames.Add(BitmapFrame.Create(
                     new Bitmap(_image, newWidth, newHeight).CreateBitmapSource()));
    }

    using (var ms = new MemoryStream())
    {
        encoder.Save(ms);
        ms.Position = 0;
        _image = new Bitmap(ms);
    }
}

public static BitmapSource CreateBitmapSource(this Bitmap bitmap)
{
    if (bitmap == null)
        throw new ArgumentNullException("bitmap");

    lock (bitmap)
    {
        IntPtr hBitmap = bitmap.GetHbitmap();

        return System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
            hBitmap,
            IntPtr.Zero,
            Int32Rect.Empty,
            BitmapSizeOptions.FromEmptyOptions());
    }
}

如果我将它输出到文件流,gif就会被动画化(尽管帧看起来有点慢),但是如果我将它加载到图像中,那么从内存流中加载它或者从内存流加载它并不重要。 &#34;工作&#34;来自文件流的gif,它只包含1帧 我做错了什么?

0 个答案:

没有答案