V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
sen506
V2EX  ›  问与答

SDL 绘制颜色显示异常

  •  
  •   sen506 · 2018-02-18 10:58:25 +08:00 · 1957 次点击
    这是一个创建于 2462 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近准备写个魔塔的小游戏, 使用 sdl 画界面, 但是发现贴图的时候颜色显示有问题, 原始图片直接打开显示为透明背景, 但是如果使用 ffplay 打开, 则跟游戏里面看到的一样, 会出现粉色或者白色的背景, 有没有办法去掉这部分异常的颜色呢?

    //这个是用来过滤背景色的代码, 但只使用了第一个像素来判断, 没法处理那部分异常的颜色。。
    SDL_GetRGB(*(uint8_t *)(goodImg->pixels), goodImg->format, &r, &g, &b);
    SDL_SetColorKey(goodImg, SDL_SRCCOLORKEY|SDL_RLEACCEL, SDL_MapRGB(goodImg->format, r, g, b));
    

    这个是原始的几张图片

    raw_genius

    raw_hero

    raw_key

    这个是展示后的效果 process_view

    10 条回复    2018-02-18 18:59:02 +08:00
    KeepPro
        1
    KeepPro  
       2018-02-18 11:15:22 +08:00 via Android
    哇,前几天同事也在用 SDL 写魔塔。大过年的,你们要不要认识一下。😁
    besto
        2
    besto  
       2018-02-18 11:25:41 +08:00
    只是探讨一下。如果你打开有透明色,那么这应该是 PNG/GIF 格式(猜)。而需要设置 keycolor 的,应该是 JPEG。你要么弄个白色 JPEG 看看能否透明。
    sen506
        3
    sen506  
    OP
       2018-02-18 11:41:37 +08:00
    @besto 并不是 PNG/GIF 特有的,部分图片设置透明色后是正常的。。
    sen506
        4
    sen506  
    OP
       2018-02-18 12:02:49 +08:00
    @besto 搞定了, 这里是图片的问题导致的, 用 PS 把看不见的背景再清理一遍就可以了。。
    ![process_ed]( https://download.sendev.cc/public/img/process_ed.png)
    besto
        5
    besto  
       2018-02-18 12:16:43 +08:00
    @sen506 能设置一种颜色,使得图片可以透明和支持透明( A 通道)是不一样的
    kokutou
        6
    kokutou  
       2018-02-18 13:03:44 +08:00 via Android
    有种操作叫 key
    跟透明通道不一样。
    是指定一个颜色值作为透明色。
    非 png 也能做透明图。
    sen506
        7
    sen506  
    OP
       2018-02-18 13:57:08 +08:00
    @kokutou 你说的应该就是这个 SDL_SetColorKey, 这个确实是有用的, 但我上面给出的那些图片虽然看起来是透明的, 但实际上并不是, 用 PS 预处理后才正常了。。
    sen506
        8
    sen506  
    OP
       2018-02-18 13:57:50 +08:00
    @KeepPro 哈哈, 可以交流下, naivesen#gmail#com
    h4lbhg1G
        9
    h4lbhg1G  
       2018-02-18 17:25:37 +08:00
    魔塔啊 还是在步步高词典里面玩的那个 好像玩那个原始版本的啊 记得好像还有两个隐藏的钥匙可以拿
    zhujinliang
        10
    zhujinliang  
       2018-02-18 18:59:02 +08:00 via iPhone
    想起很早以前玩 GDI、bitblt,要先画一个掩膜,再画图片,可以实现透明贴图,那会儿都是 bmp 位图,一般就用#00ffff 这个颜色作为 key,因为这个颜色很少被用到
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5272 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 07:23 · PVG 15:23 · LAX 23:23 · JFK 02:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.