龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > asp.net编程 >

asp.net生成透明GIF图片的方法

时间:2009-12-21 11:47来源:未知 作者:admin 点击:
分享到:
首先呢,我们准备一个PLMM,嘿嘿: 大家看到PLMM帽子边上的那个黄色圆圈了吗?一会我们就要将它变成透明的,生成一张可以在IE6中透明的GIF图。 首先呢,我们使用常规方式: 1 Dim gif

首先呢,我们准备一个PLMM,嘿嘿:

 

大家看到PLMM帽子边上的那个黄色圆圈了吗?一会我们就要将它变成透明的,生成一张可以在IE6中透明的GIF图。

首先呢,我们使用常规方式:

 1Dim gif1 As New Bitmap("plmm.jpg")
 2        gif1.MakeTransparent(Color.Yellow)
 3        PictureBox1.Image = gif1
 4
 5        '这里我将它保存为gif到流里,这里是内存流,在asp.net中则是outputstream ,再显示在picturebox2里
 6        Dim ms As New System.IO.MemoryStream()
 7        gif1.Save(ms, Imaging.ImageFormat.Gif)
 8
 9        Dim gif2 = Bitmap.FromStream(ms)
10        ms.Dispose()
11
12        PictureBox2.Image = gif2
13
14        '***变黑了****

 

这个结果是十分令人沮丧的:那个圆圈非但没透明,甚至还变成了黑色:

那么如果我直接保存为文件呢?图我就不贴了,和上面一样,还是黑的。

 

1        Dim gif1 As New Bitmap("plmm.jpg")
2        gif1.MakeTransparent(Color.Yellow)
3        PictureBox1.Image = gif1
4
5        '***直接保存为文件:***
6        gif1.Save("out1.gif", Imaging.ImageFormat.Gif)
7
8        '***还是黑的**********
9        PictureBox2.ImageLocation = "out1.gif"

 

 这是我网上进行了一番搜索,大致上可以搜到这么一个版本:先修改调色板,然后再另外拷贝数据。

大致原理是:GIF是一种索引图像,最大色彩数256色 (PS:其实这个色彩数不少了,想当年,我上学时候经常逃课去玩

世嘉五代 MD游戏机,那个同屏发色数才16色,同期的超级任天堂的同屏发色数也不过256色,呵呵,这些都是从<<电子游戏软件>>里看来的)

GIF有一个调色板,最大有256个颜色索引,然后每个像素保存的是调色板的颜色索引值。故此,只需修改调色板,即可调整

图像的颜色。

OK,那么我们来改下调色板:

 

 1        '***我们读取上一步生成的不透明gif
 2        Dim gif As New Bitmap("out1.gif")
 3        PictureBox1.Image = gif
 4
 5        '***获取色板***
 6        Dim pal = gif.Palette
 7
 8        For i As Integer = 0 To pal.Entries.Length - 1
 9            Dim color = pal.Entries(i)
10            '***将黑色改为透明,并且玩个反色特效,嘿嘿***
11            If color.R = 0 And color.G = 0 And color.B = 0 Then
12                pal.Entries(i) = color.Transparent
13            Else
14                pal.Entries(i) = color.FromArgb(255, color.B, color.G, color.R)
15            End If
16
17        Next
18
19        Dim gif2 As Bitmap = gif.Clone()
20        gif2.Palette = pal
21
22        PictureBox2.Image = gif2

 

结果如图:

 

 看起来效果不错,纯黑色部分被透明了!而且么,还出来个反色特效,HOHO

不过你不要高兴得太早,如果这时候你保存的话,它还是黑的!!


精彩图集

赞助商链接