3399
- 收藏
- 点赞
- 分享
- 举报
请教,使用 SDL_TTF 如何设置 OSD 背景色
本帖最后由 点缀0001 于 2019-4-23 11:50 编辑
按照社区的帖子,使用 freetype, sdl, sdl_ttf 来制作 osd
但是现在遇到问题,不知如何设置 osd 的背景色
尝试使用 TTF_RenderUTF8_Shaded 这个 api 设置背景色,但是无法把背景色设置透明
请教社区的前辈,对于 argb1555 和 argb8888 如何设置背景色呢?还有透明背景色如何处理
以下是使用 argb1555 测试的部分代码
if (TTF_Init() < 0)
{
printf("Couldn't initialize TTF:%s\n", SDL_GetError());
SDL_Quit();
return -1;
}
font = TTF_OpenFont("./simsunb.ttf", 48); // 24 32 48 64 96
if (NULL == font)
{
printf("Couldn't load %d pt font from %s:%s\n", 18, "ptsize", SDL_GetError());
return -1;
}
fmt = (SDL_PixelFormat *)malloc(sizeof(SDL_PixelFormat));
memset(fmt, 0, sizeof(SDL_PixelFormat));
fmt->format = SDL_PIXELFORMAT_ARGB1555;
fmt->Amask = 0x01 << 15;
fmt->Rmask = 0x1f << 10;
fmt->Gmask = 0x1f << 5;
fmt->Bmask = 0x1f << 0;
fmt->Ashift = 15;
fmt->Rshift = 10;
fmt->Gshift = 5;
fmt->Bshift = 0;
stBitmap->enPixelFormat = PIXEL_FORMAT_RGB_1555;
// alpha 0 % = 00, 透明。 100%=FF 不透明。
SDL_Color forecol[ ] =
{
{ 0xff, 0x00, 0x00, 0xff }, // red
{ 0xff, 0xff, 0x00, 0xff }, // yellow
{ 0x00, 0x00, 0xff, 0xff }, // blue
{ 0x00, 0xff, 0x00, 0xff }, // green
{ 0xff, 0xff, 0xff, 0xff }, // white
{ 0x00, 0x00, 0x00, 0xff }, // black
{ 0x00, 0x00, 0x00, 0x00 }, // transparent
};
#if 0
text = TTF_RenderUTF8_Solid(font, osdContent, forecol[fg_index]);
#else
text = TTF_RenderUTF8_Shaded(font, osdContent, forecol[fg_index], forecol[bg_index]);
#endif
temp = SDL_ConvertSurface(text, fmt, 0);
按照社区的帖子,使用 freetype, sdl, sdl_ttf 来制作 osd
但是现在遇到问题,不知如何设置 osd 的背景色
尝试使用 TTF_RenderUTF8_Shaded 这个 api 设置背景色,但是无法把背景色设置透明
请教社区的前辈,对于 argb1555 和 argb8888 如何设置背景色呢?还有透明背景色如何处理
以下是使用 argb1555 测试的部分代码
if (TTF_Init() < 0)
{
printf("Couldn't initialize TTF:%s\n", SDL_GetError());
SDL_Quit();
return -1;
}
font = TTF_OpenFont("./simsunb.ttf", 48); // 24 32 48 64 96
if (NULL == font)
{
printf("Couldn't load %d pt font from %s:%s\n", 18, "ptsize", SDL_GetError());
return -1;
}
fmt = (SDL_PixelFormat *)malloc(sizeof(SDL_PixelFormat));
memset(fmt, 0, sizeof(SDL_PixelFormat));
fmt->format = SDL_PIXELFORMAT_ARGB1555;
fmt->Amask = 0x01 << 15;
fmt->Rmask = 0x1f << 10;
fmt->Gmask = 0x1f << 5;
fmt->Bmask = 0x1f << 0;
fmt->Ashift = 15;
fmt->Rshift = 10;
fmt->Gshift = 5;
fmt->Bshift = 0;
stBitmap->enPixelFormat = PIXEL_FORMAT_RGB_1555;
// alpha 0 % = 00, 透明。 100%=FF 不透明。
SDL_Color forecol[ ] =
{
{ 0xff, 0x00, 0x00, 0xff }, // red
{ 0xff, 0xff, 0x00, 0xff }, // yellow
{ 0x00, 0x00, 0xff, 0xff }, // blue
{ 0x00, 0xff, 0x00, 0xff }, // green
{ 0xff, 0xff, 0xff, 0xff }, // white
{ 0x00, 0x00, 0x00, 0xff }, // black
{ 0x00, 0x00, 0x00, 0x00 }, // transparent
};
#if 0
text = TTF_RenderUTF8_Solid(font, osdContent, forecol[fg_index]);
#else
text = TTF_RenderUTF8_Shaded(font, osdContent, forecol[fg_index], forecol[bg_index]);
#endif
temp = SDL_ConvertSurface(text, fmt, 0);
我来回答
回答3个
时间排序
认可量排序
认可0
认可0
认可0
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币
Markdown 语法
- 加粗**内容**
- 斜体*内容*
- 删除线~~内容~~
- 引用> 引用内容
- 代码`代码`
- 代码块```编程语言↵代码```
- 链接[链接标题](url)
- 无序列表- 内容
- 有序列表1. 内容
- 缩进内容
- 图片![alt](url)
相关问答
-
2016-03-02 11:25:48
-
2017-11-06 17:23:49
-
2015-05-21 15:41:04
-
2019-12-26 09:28:58
-
2016-09-14 16:58:48
-
2021-06-03 07:50:06
-
2016-06-28 12:11:24
-
2016-07-19 21:15:51
-
2017-03-22 11:36:38
-
2016-03-05 10:53:40
-
2019-07-23 09:59:21
-
2021-04-29 17:49:55
-
2021-05-08 17:27:49
-
2016-09-19 21:03:20
-
2018-09-26 11:48:56
-
2018-09-26 11:09:56
-
2017-09-07 20:25:01
-
2020-11-20 16:06:08
-
2022-01-14 08:45:25
无更多相似问答 去提问
点击登录
-- 积分
-- E币
提问
—
收益
—
被采纳
—
我要提问
切换马甲
上一页
下一页
悬赏问答
-
5Hi3516CV610 如何使用SD卡升级固件
-
5cat /dev/logmpp 报错 <3>[ vi] [func]:vi_send_frame_node [line]:99 [info]:vi pic queue is full!
-
50如何获取vpss chn的图像修改后发送至vo
-
5FPGA通过Bt1120传YUV422数据过来,vi接收不到数据——3516dv500
-
50SS928 运行PQtools 拼接 推到设备里有一半画面会异常
-
53536AV100的sample_vdec输出到CVBS显示
-
10海思板子mpp怎么在vi阶段改变视频数据尺寸
-
10HI3559AV100 多摄像头同步模式
-
9海思ss928单路摄像头vio中加入opencv处理并显示
-
10EB-RV1126-BC-191板子运行自己编码的程序
举报反馈
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明
提醒
你的问题还没有最佳答案,是否结题,结题后将扣除20%的悬赏金
取消
确认
提醒
你的问题还没有最佳答案,是否结题,结题后将根据回答情况扣除相应悬赏金(1回答=1E币)
取消
确认