当前位置:七道奇文章资讯安全技术网络技术
日期:2009-11-02 13:25:00  来源:本站整理

asp.net生成透明gif的准完善筹划[网络技术]

赞助商链接



  本文“asp.net生成透明gif的准完善筹划[网络技术]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

我近来在实现我的WMS服务器的时刻,发现了一个超级忧郁的问题,问题描写以下:客户需求动态叠加一个透明层到底图上,比方说公交线路层,这个层有透明后台,于是可以叠加到其他图层上去.利用openlayer动态叠加图层很便利,我想这还不简单,利用透明png不就OK了,测试后果表明,在我机械的IE8上,非常正常.我正暗自得意,另一位兄弟用IE6一看,完蛋了,IE6不支持透明PNG,汗,这下要了命了,赶忙翻openlayers的资料,发现可以针对IE6分外利用透明滤镜.利用办法很便利,只要设置要透明的层 属性 alpha=true便可.测试后发现,透明是透明了,但是由于图片瓦块数过量,招致IE6被拖得半死,反映迟钝.汗,于是我想,那就对线路层利用gif 格局呗,gif不也可以透明后台么.于是,悲剧呈现了.为了讲解清楚,我以一个PLMM为模特,嘿嘿
  首先呢,我们预备一个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 = gif

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

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

  这是我们需求利用拷贝位图数据的办法来处理:
 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            End If
14        Next
15
16        '***别的成立一个位图,格局为8位索引色**
17        Dim gif2 As New Bitmap(gif.Width, gif.Height, Imaging.PixelFormat.Format8bppIndexed)
18        '***设置改正后的调色板***
19        gif2.Palette = pal
20        '***拷贝内存
21
22        Dim src = gif.LockBits(New Rectangle(0, 0, gif.Width, gif.Height), Imaging.ImageLockMode.ReadOnly, gif.PixelFormat)

[1] [2] [3] [4]  下一页


  以上是“asp.net生成透明gif的准完善筹划[网络技术]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • ASP利用正则表达式提取内容
  • nginx 反向代理iis支持 ASP脚本设置
  • <b>ASP.NET安全设置防备ASPXSpy</b>
  • Ubuntu Server+Apache 运行 asp.net
  • 怎样ASP.NET MVC调用Delphi开辟的Web报表
  • 学习ASP.NET需求举行的步骤办法
  • ASP.NET脚本过滤-避免跨站脚本攻击
  • Asp WinHttp.WinHttpRequest.5.1 对象利用详解
  • ASP防XSS注入函数
  • Asp 防备CC攻击模块 (Anti-CC.asp)
  • metasploit metasploit 中文系统安装失利问题
  • Ubuntu 11下安装Metasploit Pro 4.0.0
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .