C#修改GIF大小同时保持GIF仍然可动和背景透明
2013-12-31 23:50
274 查看
/// <summary> /// 设置GIF大小 /// </summary> /// <param name="path">图片路径</param> /// <param name="width">宽</param> /// <param name="height">高</param> private void setGifSize(string path, int width, int height) { Image gif = new Bitmap(width, height); Image frame = new Bitmap(width, height); Image res = Image.FromFile(path); Graphics g = Graphics.FromImage(gif); Rectangle rg = new Rectangle(0, 0, width, height); Graphics gFrame = Graphics.FromImage(frame); foreach (Guid gd in res.FrameDimensionsList) { FrameDimension fd = new FrameDimension(gd); //因为是缩小GIF文件所以这里要设置为Time,如果是TIFF这里要设置为PAGE,因为GIF以时间分割,TIFF为页分割 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 (0 == i) { g.DrawImage(res, rg); eps = new EncoderParameters(1); //第一帧需要设置为MultiFrame eps.Param[0] = new EncoderParameter(encoder, (long)EncoderValue.MultiFrame); bindProperty(res, gif); gif.Save(@"C:\tmp\test\aaa.gif", 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); } } /// <summary> /// 将源图片文件里每一帧的属性设置到新的图片对象里 /// </summary> /// <param name="a">源图片帧</param> /// <param name="b">新的图片帧</param> 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; }
相关文章推荐
- C#修改GIF大小同时保持GIF仍然可动和背景透明
- C#更改gif图片大小后仍然保持动画效果
- C#更改gif图片大小后仍然保持动画效果
- Java修改图片png格式透明背景大小分辨率
- Java调整图片大小合并PNG图片生成ICON(保持背景透明)
- ps修改gif图片背景透明及如何制作gif图片(图文记录)
- C#中保存GIF文件后透明背景问题的一个解决方法
- C#中保存GIF文件后透明背景问题的一个解决方法
- 同时使用background-attachment:fixed; 和 background-size:cover;时背景图大小被切割的解决方法
- 消除锯齿 保存光滑边缘的透明背景Gif图像
- 修改Ecplise中背景颜色、大小
- cximage 进行gif 背景透明处理
- Eclipse中代码编辑背景颜色修改;Eclipse字体大小调整
- C#重写控件使其透明背景
- c#中怎样在窗体间相互传送数据,且能在修改窗体A的数据时,窗体B能够根据窗体A的数据同时作出反应修改其相应数据
- Android 修改原生NumberPicker数字选择器的分隔线颜色、文字颜色和大小,同时利用PopupWindow和补间动画自定义弹出效果
- bat批处理修改cmd窗口大小、标题、字体、背景颜色
- C# 用GDI在图片上写字实现lable透明背景
- 【c#】关于设置RichTextBox背景透明+无光标只读状态
- 固定网页背景图同时保持图片比例的思路代码