PictureBox picImg = new PictureBox();
picImg.Width = 100;
picImg.Height = 60;
picImg.Image = Image.FromFile("01.gif");gif 的动态图片,图片大小 宽:600 高:576现在想把它显示在winform 中,设置了PictureBox宽高,但时能显示一部分,
现在我想把它全部显示出来宽高只有 100X60 怎么做才得呢?
picImg.Width = 100;
picImg.Height = 60;
picImg.Image = Image.FromFile("01.gif");gif 的动态图片,图片大小 宽:600 高:576现在想把它显示在winform 中,设置了PictureBox宽高,但时能显示一部分,
现在我想把它全部显示出来宽高只有 100X60 怎么做才得呢?
解决方案 »
- 类型转换问题,急救
- 关于oracle里面日期转换
- 关于Timer的问题
- Datagridview 自定义ComboBox列,在显示下拉列表的问题......
- 请问,这个List查询为什么报错?
- 关于datagrid的编辑列显示问题
- 中心点构架是说,程序得所有模块都连接在中心点上,任何一个模块只和中心点有关系,其他不再有任何关系,任何一个模块必须要在中心点上,注册后,可以被中心点托管。
- 在线等:怎么得到网页的源码
- 求救一个关于数据库的问题?多谢
- 使用Process.Start启动一个外部exe程序如何使它最小化?
- webclient 的 DownloadDataAsync异常捕获问题 请大家帮忙看看 先感谢
- backgroundworker多线程操作界面控件
http://hi.baidu.com/zfzl0000/item/82f7eb8a20df4d5c850fabfa
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;
}
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;