SDL中文论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 4529|回复: 0
打印 上一主题 下一主题

[SDL] SDL_RenderReadPixels

[复制链接]

149

主题

331

帖子

2445

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2445
跳转到指定楼层
楼主
发表于 2016-7-14 10:35:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 ancientcc 于 2016-7-14 10:45 编辑

从当前帧缓冲区读像素数据

语法
  1. int SDL_RenderReadPixels(SDL_Renderer* renderer, const SDL_Rect* rect, Uint32 format, void* pixels, int pitch)
复制代码


参数
renderer要操作的渲染器
rect位在帧缓冲区的矩形,函数目标就是取该矩形块内的像素
format生成的像素数据的格式
pixelsapp须预分配、用于存放生成的像素数据的存储区
pitch生成的像素块的行跨距。不是帧缓冲区的行跨距。


返回值
0表示成功。否则是一个负值,调用SDL_GetError可获得错误的更多信息。

范例

  1. surface dst = create_neutral_surface(area.w, area.h);
  2. {
  3.         surface_lock dst_lock(dst);
  4.         uint32_t format = get_neutral_pixel_format().format;
  5.         SDL_RenderReadPixels(get_renderer(), &area, format, dst->pixels, SDL_BYTESPERPIXEL(format) * area.w);
  6. }
复制代码

读当前帧缓冲区,把area块内像素搬到dst->pixels。dst->pixels中的像素格式是get_neutral_pixel_format().format。

注释
这是个非常慢的函数,不要经常调用。怎么个慢法,参考这贴子:SDL_UpdateTexture、SDL_RenderCopy、SDL_RenderReadPixels的花费时间

窗口帧缓冲区和目标帧缓冲区
SDL_RenderReadPixels支持从两种帧缓冲区读取数据,渲染器的target变量控制了要读取是哪一种。当是目标帧缓冲区时,有一些特殊限定。
  • 目标帧缓冲区对应纹理的像素格式须是4分量、4字节。
  • SDL_RenderReadPixels不会改变像素格式,它直接以纹理格存放在pixels。因为这个原因,参数format其实只要表示这是“4分量、4字节”就行,而pitch总是要等于w*4。


相关类、函数
<Relative class, function>
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|丽谷软件|libsdl.cn

GMT+8, 2025-5-2 00:26 , Processed in 0.043587 second(s), 19 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表