如何快速学习:[1]Swift编程语言,Swift,苹果于2014年WWDC(苹果开发者大会)发布的新开发语言,可与Ojective-C*共同运行于MacOS和iOS平台,用于搭建基于苹果平台的应用程......
2023-03-17 270 编程语言
如果在显示图片时不要背景怎么办?
这次就利用SDL2实现surface抠图。
比如:我用第三节课的代码显示一张图片circle.png,效果图如下。但是我又不需要图片的白色部分怎么办?
再不处理图片的情况下,也可以通过SDL代码实现。
只需修改第三节课代码便可实现(增加两个函数)。如图红色标记。
第10行:unit32是32位无符号整型数据,SDL_MapRGB是根据参数返回一个不透明的像素值。函数参数:surface->format是surface的像素格式,后面三个参数分别是r(红red)、g(绿green)、b(蓝blue)的值。
第11行:SDL_SetColorKey是一个抠色函数,把某个指定的像素变透明。函数参数:SDL_TRUE决定抠色,相反SDL_FALSE表示不抠色;colorkey为将要抠掉颜色的像素值。
运行结果如图。
总结:这方法需要先知道背景色的r、g、b值才行,而且这方法对比较单一的背景颜色才好使用。
代码:
#includeSDL2/SDL.h
#includeSDL2/SDL_image.h>
intmain(intargc,char**argv)
{
SDL_Init(SDL_INIT_VIDEO);
SDL_Window*window=SDL_CreateWindow("surface抠图",SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,720,1280,SDL_WINDOW_SHOWN);
SDL_Renderer*renderer=SDL_CreateRenderer(window,-1,SDL_RERER_ACCELERATED);
SDL_RenderClear(renderer);
SDL_Surface*surface=IMG_Load("./resource/circle.png");
Uint32colorkey=SDL_MapRGB(surface->format,255,255,255);
SDL_SetColorKey(surface,SDL_TRUE,colorkey);
SDL_Rectbox={200,400,surface->w,surface->h};
SDL_Texture*texture=SDL_CreateTextureFromSurface(renderer,surface);
SDL_RenderCopy(renderer,texture,NULL,&box);
SDL_RenderPresent(renderer);
SDL_Delay(6000);
SDL_FreeSurface(surface);
SDL_DestroyTexture(texture);
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
}
以上方法由办公区教程网编辑摘抄自百度经验可供大家参考!
相关文章
如何快速学习:[1]Swift编程语言,Swift,苹果于2014年WWDC(苹果开发者大会)发布的新开发语言,可与Ojective-C*共同运行于MacOS和iOS平台,用于搭建基于苹果平台的应用程......
2023-03-17 270 编程语言
web图表开发工具FineReport:[11]连续分组,数据库表数据是按照时间先后录入的,查询的时候希望按照时间先后,某个字段连续相同的话就合并起来显示,这样的报表可以通过相邻连续分组来实现。......
2023-03-17 499 编程语言