网页
资讯
视频
图片
知道
文库
贴吧
地图
采购
进入贴吧
全吧搜索
吧内搜索
搜贴
搜人
进吧
搜标签
日
一
二
三
四
五
六
签到排名:今日本吧第
个签到,
本吧因你更精彩,明天继续来努力!
本吧签到人数:0
一键签到
成为超级会员,使用一键签到
一键签到
本月漏签
0
次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行
补签
。
连续签到:
天 累计签到:
天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
04月29日
漏签
0
天
sdl吧
关注:
4,209
贴子:
12,532
看贴
图片
吧主推荐
视频
游戏
37
回复贴,共
1
页
<<返回sdl吧
>0< 加载中...
SDL透明背景实现问题
只看楼主
收藏
回复
mmmmmmmar
活跃吧友
5
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
我想用SDL写一个弹幕程序,但是在背景透明时遇到了问题,现在知道的有两个方式实现透明。
一个是SDL_CreateShapedWindow,创建一个定制形状的窗口,个人感觉不合适
另一个是SDL_SetWindowOpacity函数,它可以使窗口透明,但是我只想让背景透明,并不想让上面的其他元素也跟着透明。
有做过这方面的人吗,求解
mmmmmmmar
活跃吧友
5
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
比如这样,直接把文字也给透明了,怎么才能让字不透明呢
lxfly2000
知名人士
10
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
SDL没有这种功能、不过你可以自己写函数用GDI截取桌面图像、然后用SDL_Surface格式保存再显示到背景层上。
liuhaitian520
核心吧友
7
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
图片透明
SDL_SetSurfaceBlendMode(s,SDL_BLENDMODE_BLEND);//透明度模式
SDL_SetSurfaceAlphaMod(s,100);//设置透明度
mmmmmmmar
活跃吧友
5
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
window = SDL_CreateWindow("Test",SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,640,480,SDL_WINDOW_SHOWN);
winSurface = SDL_GetWindowSurface(window); SDL_SetSurfaceBlendMode(winSurface,SDL_BLENDMODE_BLEND); SDL_SetSurfaceAlphaMod (winSurface,100);
while(!quit) {
SDL_UpdateWindowSurface(window);
SDL_Delay(1000/60);
}
@liuhaitian520是这样吗,好像不顶用
liuhaitian520
核心吧友
7
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
#include <SDL2/SDL.h>
int main(int args,char*argv[])
{
SDL_Init(SDL_INIT_VIDEO);
SDL_Window*w=SDL_CreateWindow("",0,0,720,1280,0);
SDL_Renderer*r=SDL_CreateRenderer(w,-1,0);
SDL_RenderClear(r);
SDL_SetRenderDrawColor(r,255,255,255,255);
SDL_Rect box={0,0,720,1280};
SDL_RenderFillRect(r,&box);
SDL_Surface*s=SDL_CreateRGBSurface(0, 500, 500, 32, 0, 0, 0, 0);
SDL_FillRect(s,NULL,0x00000000);
SDL_SetSurfaceBlendMode(s,SDL_BLENDMODE_BLEND);//透明度模式
SDL_SetSurfaceAlphaMod(s,200);//设置透明度,200为透明程度
SDL_Texture*t=SDL_CreateTextureFromSurface(r,s);
box.w=500;
box.h=500;
SDL_RenderCopy(r,t,NULL,&box);
SDL_RenderPresent(r);
SDL_Delay(2000);
SDL_FreeSurface(s);
SDL_DestroyRenderer(r);
SDL_DestroyRenderer(r);
SDL_DestroyWindow(w);
SDL_Quit();
}
liuhaitian520
核心吧友
7
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
mmmmmmmar
活跃吧友
5
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
需要窗口背景透明,可以看到窗口后边的其他程序,图中的效果是使用了SDL_SetWindowOpacity函数,但这个函数会使整个窗口透明,比如你在上边渲染一个图片,图片也会变成透明
liuhaitian520
核心吧友
7
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
liuhaitian520
核心吧友
7
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
#include <SDL2/SDL_ttf.h>
int main(int args,char*argv[])
{
SDL_Init(SDL_INIT_VIDEO);
SDL_Window*w=SDL_CreateWindow("",0,0,720,1280,0);
SDL_Renderer*r=SDL_CreateRenderer(w,-1,0);
SDL_RenderClear(r);
//图片转纹理
SDL_Texture*t=IMG_LoadTexture(r,"a.png");
SDL_RenderCopy(r,t,NULL,NULL);
SDL_DestroyTexture(t);
t=NULL;
SDL_SetRenderDrawBlendMode(r,SDL_BLENDMODE_BLEND);//设置renderer透明度
SDL_SetRenderDrawColor(r,0,0,0,200);
SDL_Rect box={100,200,520,520};
SDL_RenderFillRect(r,&box);
t=IMG_LoadTexture(r,"../../Window/显示图片/ball.png");
box.x=200; box.y=250;
box.w=100; box.h=100;
SDL_RenderCopy(r,t,NULL,&box);
SDL_DestroyTexture(t);
t=NULL;
TTF_Init();
TTF_Font*f=TTF_OpenFont("../文字/方正黑体简体.ttf",100);
SDL_Color c={200,200,200,0};
SDL_Surface*sur=TTF_RenderUTF8_Blended(f,"宁静致远",c);
box={200,400,sur->w,sur->h};
TTF_CloseFont(f);
f=NULL;
TTF_Quit();
t=SDL_CreateTextureFromSurface(r,sur);
SDL_RenderCopy(r,t,NULL,&box);
SDL_FreeSurface(sur);
SDL_RenderPresent(r);
SDL_Delay(5000);
SDL_DestroyTexture(t);
SDL_DestroyRenderer(r);
SDL_DestroyWindow(w);
SDL_Quit();
}
登录百度账号
扫二维码下载贴吧客户端
下载贴吧APP
看高清直播、视频!
贴吧页面意见反馈
违规贴吧举报反馈通道
贴吧违规信息处理公示