SDL_Surface表面
本结构包含了使用软件方式显示的图片信息。
Uint32 |
flags |
(内部使用) |
SDL_PixelFormat* |
format |
图层的像素格式; 详见 SDL_PixelFormat (只读) |
int |
w, h |
像素级的宽度和高度 (只读) |
int |
pitch |
一行像素所占的字节数(二位的图像像素会以一维的方式来存储,每一维的长度我们必须知道) (只读) |
void* |
pixels |
指向真实像素的指针;详见讨论 (读写) |
void* |
userdata |
用户可以任意设置的指针 (读写) |
int |
locked |
用于需要锁定的图层 (内部使用) |
void* |
lock_data |
用于需要锁定的图层 (内部使用) |
SDL_Rect |
clip_rect |
SDL_Rect 结构体, 位图传送(blit)时用来裁剪区域 ,可以使用SDL_SetClipRect() 来设置(只读) |
SDL_BlitMap* |
map |
向其他图层进行fast blit的映射信息 (内部使用) |
int |
refcount |
引用计数,可以被程序增加 |
Uint32 |
flags |
(internal use) |
SDL_PixelFormat* |
format |
the format of the pixels stored in the surface; see SDL_PixelFormat for details (read-only) |
int |
w, h |
the width and height in pixels (read-only) |
int |
pitch |
the length of a row of pixels in bytes (read-only) |
void* |
pixels |
the pointer to the actual pixel data; see Remarks for details (read-write) |
void* |
userdata |
an arbitrary pointer you can set (read-write) |
int |
locked |
used for surfaces that require locking (internal use) |
void* |
lock_data |
used for surfaces that require locking (internal use) |
SDL_Rect |
clip_rect |
an SDL_Rect structure used to clip blits to the surface which can be set by SDL_SetClipRect() (read-only) |
SDL_BlitMap* |
map |
info for fast blit mapping to other surfaces (internal use) |
int |
refcount |
reference count that can be incremented by the application |
Pixel 概念。
数字屏幕是一个二维可显示的像素空间,即一个一个点形成的。如果是黑白色,只需要0,1即可表示。但如果这个点有表达多种颜色。
SDL_Surface 概念
Surface是平面的含意,在SDL中,所有绘制在视频输出都是通过SDL_Sur对face对象来输出。一个图像,一段文字,一个视频都需要转换成SDL_Surface对象来操作,它们可以平铺,堆叠。他们所有数据最终要在一个叠加在表示screen 的SDL_Surface的对象中输出显示。
因此SDL_Surface本质是一个矩形的像素内存,它需要通过专门的绘点函数来输出到不同设备上。
其中SDL_Surface 的坐标系是左上角是原点,向下向左递增.
SDL_Surface的高,宽值保存在结构的w,h成员。(SDL_Surface.w,SDL_Surface.h);
SDL_Surface 的底层输出
--------------------------------------
在桌面平台一般无需处理原始像素输出。在嵌入式平台,如果分辩率不同,要做一些特殊处理。以下就一段通用代码。分别处理 像素数为8,16,32位的情况。这个后面会使用
像素处理
- void DrawPixel(SDL_Surface *screen, Uint8 R, Uint8 G, Uint8 B)
- {
- Uint32 color = SDL_MapRGB(screen->format, R, G, B);
- if ( SDL_MUSTLOCK(screen) ) {
- if ( SDL_LockSurface(screen) < 0 ) {
- return;
- }
- }
- switch (screen->format->BytesPerPixel) {
- case 1: { /* Assuming 8-bpp */
- Uint8 *bufp;
- bufp = (Uint8 *)screen->pixels + y*screen->pitch + x;
- *bufp = color;
- }
- break;
- case 2: { /* Probably 15-bpp or 16-bpp */
- Uint16 *bufp;
- bufp = (Uint16 *)screen->pixels + y*screen->pitch/2 + x;
- *bufp = color;
- }
- break;
- case 3: { /* Slow 24-bpp mode, usually not used */
- Uint8 *bufp;
- bufp = (Uint8 *)screen->pixels + y*screen->pitch + x;
- *(bufp+screen->format->Rshift/8) = R;
- *(bufp+screen->format->Gshift/8) = G;
- *(bufp+screen->format->Bshift/8) = B;
- }
- break;
- case 4: { /* Probably 32-bpp */
- Uint32 *bufp;
- bufp = (Uint32 *)screen->pixels + y*screen->pitch/4 + x;
- *bufp = color;
- }
- break;
- }
- if ( SDL_MUSTLOCK(screen) ) {
- SDL_UnlockSurface(screen);
- }
- SDL_UpdateRect(screen, x, y, 1, 1);
- }
蔡军生
跟老菜鸟学C++
SDL_Surface表面相关推荐
- OpenVINO实时人脸表面3D点云提取
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|OpenCV学堂 人脸3D点云提取网络 2019出现的一 ...
- ICCV 2021 Oral | 无需法向的大场景点云表面重建
编辑丨CVer 论文链接:https://arxiv.org/abs/2105.03582 代码已开源在github: https://github.com/tangjiapeng/SA-ConvON ...
- CVPR2021|SpinNet:学习用于3D点云配准的通用表面描述符
SpinNet: Learning a General Surface Descriptor for 3D Point Cloud Registration 论文地址:在公众号「3D视觉工坊」,后台回 ...
- Deepfit: 通过神经网络加权最小二乘法进行3D表面拟合
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 标题:DeepFit: 3D Surface Fitting via Neural Network W ...
- 李飞飞团队最新研究,真实场景中识别物体具体属性,连表面纹理都识别出来了...
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 整理:公众号@量子位 本文仅做学术分享,如有侵权,请联系删除. 现在,细微到物体表面的纹理,AI都可以 ...
- MPB:林科院袁志林组-一种简易的植物组织表面消毒装置
为进一步提高<微生物组实验手册>稿件质量,本项目新增大众评审环节.文章在通过同行评审后,采用公众号推送方式分享全文,任何人均可在线提交修改意见.公众号格式显示略有问题,建议电脑端点击文末阅 ...
- MPB:湖南师大尹佳组-乳酸菌益生菌表面粘附能力的检测
为进一步提高<微生物组实验手册>稿件质量,本项目新增大众评审环节.文章在通过同行评审后,采用公众号推送方式分享全文,任何人均可在线提交修改意见.公众号格式显示略有问题,建议电脑端点击文末阅 ...
- MPB:中南大学刘学端、马丽媛组-基于16S测序和RT-qPCR的硫化矿物表面微生物群落组成分析...
为进一步提高<微生物组实验手册>稿件质量,本项目新增大众评审环节.文章在通过同行评审后,采用公众号推送方式分享全文,任何人均可在线提交修改意见.公众号格式显示略有问题,建议电脑端点击文末阅 ...
- 上如何刻字_如何用简单的方法在零件表面刻字:这里就有你想要的答案
上一篇文章我们用solidworks软件的焊件模块来绘制了一个最简单的机架.此过程中用到了焊件的以下功能:结构构件.角撑板.只要以后画机架肯定要用到结构构件的,大家应该注意学习好这个最常用的功能,在这 ...
最新文章
- http://alvinalexander.com/java/jwarehouse/hibernat
- ubuntu内窗口最大最小化
- 如何找到某个 ABAP structure 某字段的源头来自哪个数据库表
- SAP GUI里Screen Painter的工作原理
- Linux socket编程,对套接字进行封装
- 《Oracle comment on注释信息方法论》
- 家里没什么菜的飞鸽传书
- qpushbutton设置两个图标_宝马显示屏上的各种图标是啥意思,这里分享几个问的最多的!...
- 【你不能错过的数组基础知识整理】(学习笔记9--数组下)
- 蔬菜刀行业调研报告 - 市场现状分析与发展前景预测
- Ubuntu18 安装yum
- 关于SQL Server将一列的多行内容拼接成一行的问题讨论
- oracle 除数不能为0
- 【黑帽SEO系列】网页劫持
- [Spark进阶]--深入Spark Locality Level
- 如何删除PDF空白签名域?
- FFmpeg 音频转换
- 搜狐邮件服务器地址加密方式,手把手教你如何用SMIME加密任意邮件
- opencv实现车牌识别之字符分割
- 基督教的旧约圣经和新约圣经
热门文章
- 安卓图片手势缩放-源码
- SAR图像的干涉相位 matlab_时空双缝干涉
- Java 类和对象详述
- windows server 2012修改远程桌面端口方法
- 新概念英语1册19课
- 【云和恩墨大讲堂·七月新篇章】Oracle 12c Remote Filewatcher的实施
- 小程序体验版无法访问网络request:fail -2:net::ERR_FAILED
- 名帖169 李邕 行书《云麾将军碑》
- Medical Data for Machine Learning
- 当 ITOA 遇上 OneAlert,企业可以至少每年节省 3600 小时!