如题。

解决方案 »

  1.   

    如果GIF图片中使用了透明色,那么你就需要自己写解码程序了
    如果GIF图片中没有使用透明色,那么讲透明色替换为你自己想要的颜色就可以了
      

  2.   

    我如何知道是否使用了透明色?如何替换?能给出一些codes吗?
      

  3.   

    最笨的办法
    bkColor 背景色
    myColor 你要使用的颜色HBITMAP  hBmp 是你的位图可以这样啊
    for(int i=0;i<位图的宽度;i++)
        for(int j=0;j<位图的高度;j++)
          if(GetPixel()==bkColor)
               SetPixel(...,myColor);不过这样效率很低的,最好是得到位图的内存数据,然后对内存数据修改,修改完后在复制回去用眼来判断是否使用了背景色啊,哈哈
      

  4.   

    开玩笑了,在GIF文件中有一个标记表明是否使用透明色,也可以得到透明色的RGB值
    不过在图像中是否使用了透明色就只有靠眼来判断了,或着在网上找一个GIF的解码源代码自己解码时处理一下
    我的意思是,比如你背景色是黑色,但是图像上人物的眼睛也是黑色的,就有可能造成眼睛也被你自己的透明色替换掉了,这种情况可能就需要自己解码了
      

  5.   

    我有一个格式:如下,大侠分析分析以一下。typedef struct tagGIFHEAD
    {
    BYTE bySignature[3] ; // 固定为 "GIF"
    BYTE byVersion[3]   ; // "89a" 或 "87a"
    WORD wWidth  ; // 屏幕宽度 
    WORD wHeight ; // 屏幕高度
    struct
    {
    BYTE PalBits   : 3 ; // 确定调色板大小 : 3 * (1 << (PalBits + 1))
    BYTE SortFlag  : 1 ; // 调色板中的颜色是否按使用率排序
    BYTE ColorRes  : 3 ; // 可计算分辨率   : 3 * (1 << (ColorRes + 1))
    BYTE GlobalPal : 1 ; // 全局调色板, 为 1 时PalBits才有意义
    } GlobalFlag ;
    BYTE byBackground ; // 图像小于逻辑屏幕时, 用此颜色填充未被覆盖的区域
    BYTE byAspect ; // 逻辑屏幕宽高比
    } GIFHEAD, * PGIFHEAD ;  // 13 - Bytes
    /************************************************************/
    /* 全局调色板在文件中的偏移量总是13 */
    /************************************************************/
    typedef struct tagGIFINFO
    {
    BYTE byVersion[4]   ;    // "89a" 或 "87a"
    WORD wTotalFrame ;  // 总帧数
    WORD wCurrentFrame ;    // 当前帧号 [0..wTotalFrame]
    WORD wGolPalNum ;    // 全局调色板颜色个数, 为0则无
    WORD wDelayTime ;    // 两帧间延时毫秒数
    BYTE byInterlace ;    // 是否以交错方式存储
    BYTE byTransFlag ;    // 是否有透明色
    BYTE byTransparencyIndex ;// 透明色索引值, 此颜色不显示在屏幕上
    BYTE byBitCount ;    // 为真实ColorBit数
    DWORD * pFrameIndexArray ;// 帧指针, 在文件中的偏移量, 定位在0x2C后的第一个字节
    BYTE * pStart ; // 数据流的起始指针
    }  GIFINFO, * PGIFINFO ;
    其中byTransFlag 是否就是你说的标记?
    而byTransparencyIndex是否就是你说的透明色的RGB值?可是为什么是BYTE型的??至于解码,555...
      

  6.   

    我给你一个GIF的解码文件吧,我从网上下的,我在里面加了点些注释(不多),你可以看看,你问的问题应该都可以解决的,给我你的邮箱吧