繁体中文
设为首页
加入收藏
当前位置:.Net技术首页 >> Asp.Net开发 >> 改善了性能的gif动画添加水印

改善了性能的gif动画添加水印

2007-10-15 08:00:00  作者:  来源:互联网  浏览次数:0  文字大小:【】【】【
简介:昨天的实现,效率非常低,基本要10s左右,今天重新改良了一下gif的Encoder,效率提高了不,基本实现了gif添加水印,但透明的gif在添加水印的时候仍然存在问题,有时间再研究研究 原gif 水印之后的图片为: 但是,...
关键字:水印 性能 动画 gif

昨天的实现,效率非常低,基本要10s左右,今天重新改良了一下gif的Encoder,效率提高了不,基本实现了gif添加水印,但透明的gif在添加水印的时候仍然存在问题,有时间再研究研究

原gif

水印之后的图片为:

但是,透明背景的却有些问题

原图

水印后

改动的部分

1 protected void GetImagePixels()

2 {

3 int w = image.Width;

4 int h = image.Height;

5 // int type = image.GetType().;

6 if ((w != width)

7 || (h != height)

8 )

9 {

10 // create new image with right size/format

11 Image temp =

12 new Bitmap(width, height);

13 Graphics g = Graphics.FromImage(temp);

14 g.DrawImage(image, 0, 0);

15 image = temp;

16 g.Dispose();

17 }

18 /**//*

19 ToDo:

20 improve performance: use unsafe code

21 */

22 pixels = new Byte[3 * image.Width * image.Height];

23 int count = 0;

24 Bitmap tempBitmap = new Bitmap(image);

25 int wh = image.Width;

26 int he = image.Height;

27 System.Drawing.Imaging.BitmapData bmpData = tempBitmap.LockBits(new Rectangle(0, 0, wh, he), System.Drawing.Imaging.ImageLockMode.ReadWrite, image.PixelFormat);

28 unsafe

29 {

30 byte* p = (byte*)bmpData.Scan0.ToPointer();

31 for (int i = 0; i < 4 * wh * he; i += 4)

32 {

33 pixels[count] = *(p + i+2);

34 count++;

35 pixels[count] = *(p + i + 1);

36 count++;

37 pixels[count] = *(p + i );

38 count++;

39 }

40 }

41 tempBitmap.UnlockBits(bmpData);

42 //count = 0;

43 //for (int th = 0; th < image.Height; th++)

44 //{

45 // for (int tw = 0; tw < image.Width; tw++)

46 // {

47 // Color color = tempBitmap.GetPixel(tw, th);

48 // pixels[count] = color.R;

49 // count++;

50 // pixels[count] = color.G;

51 // count++;

52 // pixels[count] = color.B;

53 // count++;

54 // }

55 //}

56

57 // pixels = ((DataBufferByte) image.getRaster().getDataBuffer()).getData();

58 }注释部分是原来代码

目前仍然有两个问题:

1)透明背景

2)生成的文件体积变大

望得到更多的指教

责任编辑:admin
相关文章