目标:处理gif的时候,需要提取每帧的透明色。
这个问题困扰偶n长时间了,一直没搞定。
比如我自己做了一个gif图片,全局背景色是黑色,第一帧透明色是白色,但是黑色在第一帧里面是有用的象素,我的目标是找出第一帧的透明色,然后把第一帧中和透明色相同的颜色换掉(在处理中,我只需要第一帧,此时第一帧已经被我转换成bmp了),我在测试的时候,只能得到gif.BackgroundColor,但是这个颜色是全局透明色!!
搞定问题,另开贴,500分,绝不食言。
本贴先给100分作为参与者鼓励,如参与人数多,再加分(兄弟最多能加到200)。

解决方案 »

  1.   

    没看过,上goole上搜索一下拉:)
      

  2.   

    5555555偶也不会ing,帮你顶上去吧
      

  3.   

    6楼 ksaiy(消失在人海-喜欢昆明的花),研究格式太郁闷了,我下载了关于gif的格式文档,难啊,呵呵,GIFImage.pass,这个单元文件用的挺多的,应该有关于透明色的定义吧,郁闷中
      

  4.   

    呵呵:)
    那你查查它的帮助和看看DEMO..自己试试那些属性,应该有的...
      

  5.   

    问题搞定,500分留着我自己花,谢谢大家参与,分值提到200结帐
    我的函数如下:
    {-----------------------------------------------------------------------------
      函数名称: GetGifSubmitTransColor
      作者    : yang
      日期    : 2004-11-9 12:39:29
      参数    : GifPath: string; acMap: TGifColorMap
      返回值  : TColor
      功能    : 根据传入的gif文件路径和gif颜色列表返回符合gif89a标准的第一帧透明色
    -----------------------------------------------------------------------------}
    function TPlusObject.GetGifSubmitTransColor(GifPath: string;
      acMap: TGifColorMap): TColor;
    var
      ms    : TMemoryStream;
      i     : Integer;
      buf   : array[0..7] of Byte;
    begin
      Result:= -1;
      ms:= TMemoryStream.Create;
      ms.LoadFromFile(GifPath);
      //笨办法,通过查找扩展控制块标记$21完成查找透明色的功能。
      for i:=0 to ms.Size-9 do
      begin
        ms.Position:= i;
        ms.read(buf,8);
        if (buf[0]=$21) and (buf[7]=$0) then
        begin
          //根据gif89a的定义,这个地方的buf[6]就是透明色的索引值
          if acMap.Count>buf[6] then Result:= acMap.Colors[buf[6]];
          break;
        end;
      end;
      ms.Free;
    end;