PictureBox picImg = new PictureBox();
  picImg.Width = 100;
  picImg.Height = 60;
  picImg.Image = Image.FromFile("01.gif");gif 的动态图片,图片大小 宽:600 高:576现在想把它显示在winform 中,设置了PictureBox宽高,但时能显示一部分,
现在我想把它全部显示出来宽高只有 100X60 怎么做才得呢?

解决方案 »

  1.   

    不能,gif不支持缩放后保持动画。
      

  2.   

    把图片的大小改成你显示的大小然后显示就可以了
    http://hi.baidu.com/zfzl0000/item/82f7eb8a20df4d5c850fabfa
      

  3.   

    可以做到,不过比较麻烦:
            public Form1()
            {
                InitializeComponent();            PictureBox picImg = new PictureBox();
                int width = 100;
                int height = 60;
                picImg.Width = width;
                picImg.Height = height;
                Image res = Image.FromFile("01.gif");
                Image gif = new Bitmap(width, height);
                Image frame = new Bitmap(width, height);
                Graphics g = Graphics.FromImage(gif);
                Rectangle rg = new Rectangle(0, 0, width, height);
                Graphics gFrame = Graphics.FromImage(frame);
                MemoryStream ms = new MemoryStream();            foreach (Guid gd in res.FrameDimensionsList)
                {
                    FrameDimension fd = new FrameDimension(gd);
                    FrameDimension f = FrameDimension.Time;
                    int count = res.GetFrameCount(fd);
                    ImageCodecInfo codecInfo = GetEncoder(ImageFormat.Gif);
                    System.Drawing.Imaging.Encoder encoder = System.Drawing.Imaging.Encoder.SaveFlag;
                    EncoderParameters eps = null;                for (int i = 0; i < count; i++)
                    {
                        res.SelectActiveFrame(f, i);
                        if (i == 0)
                        {                        g.DrawImage(res, rg);                        eps = new EncoderParameters(1);                        //第一帧需要设置为MultiFrame                         eps.Param[0] = new EncoderParameter(encoder, (long)EncoderValue.MultiFrame);
                            bindProperty(res, gif);
                            gif.Save(ms, codecInfo, eps);
                        }
                        else
                        {                        gFrame.DrawImage(res, rg);                        eps = new EncoderParameters(1);                        //如果是GIF这里设置为FrameDimensionTime,如果为TIFF则设置为FrameDimensionPage                         eps.Param[0] = new EncoderParameter(encoder, (long)EncoderValue.FrameDimensionTime);                        bindProperty(res, frame);
                            gif.SaveAdd(frame, eps);
                        }
                    }                eps = new EncoderParameters(1);
                    eps.Param[0] = new EncoderParameter(encoder, (long)EncoderValue.Flush);
                    gif.SaveAdd(eps);
                }
                picImg.Image = Image.FromStream(ms);
                this.Controls.Add(picImg);
            }        private void bindProperty(Image a, Image b)
            {            //这个东西就是每一帧所拥有的属性,可以用GetPropertyItem方法取得这里用为完全复制原有属性所以直接赋值了             //顺便说一下这个属性里包含每帧间隔的秒数和透明背景调色板等设置,这里具体那个值对应那个属性大家自己在msdn搜索GetPropertyItem方法说明就有了             for (int i = 0; i < a.PropertyItems.Length; i++)
                {
                    b.SetPropertyItem(a.PropertyItems[i]);
                }
            }        private ImageCodecInfo GetEncoder(ImageFormat format)
            {            ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();            foreach (ImageCodecInfo codec in codecs)
                {
                    if (codec.FormatID == format.Guid)
                    {
                        return codec;
                    }
                }
                return null;
            }
      

  4.   

    记得
    using System.Drawing;
    using System.Drawing.Imaging;
    using System.IO;