首页 > 软件开发 > 编程语言 >

SDL2入门(八)surface抠图

来源:互联网 2023-03-17 00:16:20 325

如果在显示图片时不要背景怎么办?vOW办公区 - 实用经验教程分享!

这次就利用SDL2实现surface抠图。vOW办公区 - 实用经验教程分享!

比如:我用第三节课的代码显示一张图片circle.png,效果图如下。但是我又不需要图片的白色部分怎么办?vOW办公区 - 实用经验教程分享!

再不处理图片的情况下,也可以通过SDL代码实现。vOW办公区 - 实用经验教程分享!

SDL2入门(八)surface抠图vOW办公区 - 实用经验教程分享!

工具/原料

  • c4droid、sdl插件
  • 一张图片:circle.png

方法/步骤

  • 1

    只需修改第三节课代码便可实现(增加两个函数)。如图红色标记。vOW办公区 - 实用经验教程分享!

    SDL2入门(八)surface抠图vOW办公区 - 实用经验教程分享!

  • 2

    第10行:unit32是32位无符号整型数据,SDL_MapRGB是根据参数返回一个不透明的像素值。函数参数:surface->format是surface的像素格式,后面三个参数分别是r(红red)、g(绿green)、b(蓝blue)的值。vOW办公区 - 实用经验教程分享!

    SDL2入门(八)surface抠图vOW办公区 - 实用经验教程分享!

  • 3

    第11行:SDL_SetColorKey是一个抠色函数,把某个指定的像素变透明。函数参数:SDL_TRUE决定抠色,相反SDL_FALSE表示不抠色;colorkey为将要抠掉颜色的像素值。vOW办公区 - 实用经验教程分享!

    SDL2入门(八)surface抠图vOW办公区 - 实用经验教程分享!

  • 4

    运行结果如图。vOW办公区 - 实用经验教程分享!

    总结:这方法需要先知道背景色的r、g、b值才行,而且这方法对比较单一的背景颜色才好使用。vOW办公区 - 实用经验教程分享!

    SDL2入门(八)surface抠图vOW办公区 - 实用经验教程分享!

  • 5

    代码:vOW办公区 - 实用经验教程分享!

    #includeSDL2/SDL.hvOW办公区 - 实用经验教程分享!

    #includeSDL2/SDL_image.h>vOW办公区 - 实用经验教程分享!

    intmain(intargc,char**argv)vOW办公区 - 实用经验教程分享!

    {vOW办公区 - 实用经验教程分享!

    SDL_Init(SDL_INIT_VIDEO);vOW办公区 - 实用经验教程分享!

    SDL_Window*window=SDL_CreateWindow("surface抠图",SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,720,1280,SDL_WINDOW_SHOWN);vOW办公区 - 实用经验教程分享!

    SDL_Renderer*renderer=SDL_CreateRenderer(window,-1,SDL_RERER_ACCELERATED);vOW办公区 - 实用经验教程分享!

    SDL_RenderClear(renderer);vOW办公区 - 实用经验教程分享!

    SDL_Surface*surface=IMG_Load("./resource/circle.png");vOW办公区 - 实用经验教程分享!

    Uint32colorkey=SDL_MapRGB(surface->format,255,255,255);vOW办公区 - 实用经验教程分享!

    SDL_SetColorKey(surface,SDL_TRUE,colorkey);vOW办公区 - 实用经验教程分享!

    SDL_Rectbox={200,400,surface->w,surface->h};vOW办公区 - 实用经验教程分享!

    SDL_Texture*texture=SDL_CreateTextureFromSurface(renderer,surface);vOW办公区 - 实用经验教程分享!

    SDL_RenderCopy(renderer,texture,NULL,&box);vOW办公区 - 实用经验教程分享!

    SDL_RenderPresent(renderer);vOW办公区 - 实用经验教程分享!

    SDL_Delay(6000);vOW办公区 - 实用经验教程分享!

    SDL_FreeSurface(surface);vOW办公区 - 实用经验教程分享!

    SDL_DestroyTexture(texture);vOW办公区 - 实用经验教程分享!

    SDL_DestroyRenderer(renderer);vOW办公区 - 实用经验教程分享!

    SDL_DestroyWindow(window);vOW办公区 - 实用经验教程分享!

    SDL_Quit();vOW办公区 - 实用经验教程分享!

    }vOW办公区 - 实用经验教程分享!

  • 5相关内容未经授权抓取自百度经验
  • 注意事项

    • 测试c4droid的版本:5.96
    • 如有不足或建议欢迎指正。

    以上方法由办公区教程网编辑摘抄自百度经验可供大家参考!vOW办公区 - 实用经验教程分享!


    标签: 编程编程语言

    办公区 Copyright © 2016-2023 www.bgqu.net. Some Rights Reserved. 备案号:湘ICP备2020019561号统计代码