本结构包含了使用软件方式显示的图片信息。

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位的情况。这个后面会使用
 
像素处理

 
  1. void DrawPixel(SDL_Surface *screen, Uint8 R, Uint8 G, Uint8 B)
  2. {
  3. Uint32 color = SDL_MapRGB(screen->format, R, G, B);
  4. if ( SDL_MUSTLOCK(screen) ) {
  5. if ( SDL_LockSurface(screen) < 0 ) {
  6. return;
  7. }
  8. }
  9. switch (screen->format->BytesPerPixel) {
  10. case 1: { /* Assuming 8-bpp */
  11. Uint8 *bufp;
  12. bufp = (Uint8 *)screen->pixels + y*screen->pitch + x;
  13. *bufp = color;
  14. }
  15. break;
  16. case 2: { /* Probably 15-bpp or 16-bpp */
  17. Uint16 *bufp;
  18. bufp = (Uint16 *)screen->pixels + y*screen->pitch/2 + x;
  19. *bufp = color;
  20. }
  21. break;
  22. case 3: { /* Slow 24-bpp mode, usually not used */
  23. Uint8 *bufp;
  24. bufp = (Uint8 *)screen->pixels + y*screen->pitch + x;
  25. *(bufp+screen->format->Rshift/8) = R;
  26. *(bufp+screen->format->Gshift/8) = G;
  27. *(bufp+screen->format->Bshift/8) = B;
  28. }
  29. break;
  30. case 4: { /* Probably 32-bpp */
  31. Uint32 *bufp;
  32. bufp = (Uint32 *)screen->pixels + y*screen->pitch/4 + x;
  33. *bufp = color;
  34. }
  35. break;
  36. }
  37. if ( SDL_MUSTLOCK(screen) ) {
  38. SDL_UnlockSurface(screen);
  39. }
  40. SDL_UpdateRect(screen, x, y, 1, 1);
  41. }

蔡军生

跟老菜鸟学C++

SDL_Surface表面相关推荐

  1. OpenVINO实时人脸表面3D点云提取

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|OpenCV学堂 人脸3D点云提取网络 2019出现的一 ...

  2. ICCV 2021 Oral | 无需法向的大场景点云表面重建

    编辑丨CVer 论文链接:https://arxiv.org/abs/2105.03582 代码已开源在github: https://github.com/tangjiapeng/SA-ConvON ...

  3. CVPR2021|SpinNet:学习用于3D点云配准的通用表面描述符

    SpinNet: Learning a General Surface Descriptor for 3D Point Cloud Registration 论文地址:在公众号「3D视觉工坊」,后台回 ...

  4. Deepfit: 通过神经网络加权最小二乘法进行3D表面拟合

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 标题:DeepFit: 3D Surface Fitting via Neural Network W ...

  5. 李飞飞团队最新研究,真实场景中识别物体具体属性,连表面纹理都识别出来了...

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 整理:公众号@量子位 本文仅做学术分享,如有侵权,请联系删除. 现在,细微到物体表面的纹理,AI都可以 ...

  6. MPB:林科院袁志林组-一种简易的植物组织表面消毒装置

    为进一步提高<微生物组实验手册>稿件质量,本项目新增大众评审环节.文章在通过同行评审后,采用公众号推送方式分享全文,任何人均可在线提交修改意见.公众号格式显示略有问题,建议电脑端点击文末阅 ...

  7. MPB:湖南师大尹佳组-​乳酸菌益生菌表面粘附能力的检测

    为进一步提高<微生物组实验手册>稿件质量,本项目新增大众评审环节.文章在通过同行评审后,采用公众号推送方式分享全文,任何人均可在线提交修改意见.公众号格式显示略有问题,建议电脑端点击文末阅 ...

  8. MPB:中南大学刘学端、马丽媛组-基于16S测序和RT-qPCR的硫化矿物表面微生物群落组成分析...

    为进一步提高<微生物组实验手册>稿件质量,本项目新增大众评审环节.文章在通过同行评审后,采用公众号推送方式分享全文,任何人均可在线提交修改意见.公众号格式显示略有问题,建议电脑端点击文末阅 ...

  9. 上如何刻字_如何用简单的方法在零件表面刻字:这里就有你想要的答案

    上一篇文章我们用solidworks软件的焊件模块来绘制了一个最简单的机架.此过程中用到了焊件的以下功能:结构构件.角撑板.只要以后画机架肯定要用到结构构件的,大家应该注意学习好这个最常用的功能,在这 ...

最新文章

  1. http://alvinalexander.com/java/jwarehouse/hibernat
  2. ubuntu内窗口最大最小化
  3. 如何找到某个 ABAP structure 某字段的源头来自哪个数据库表
  4. SAP GUI里Screen Painter的工作原理
  5. Linux socket编程,对套接字进行封装
  6. 《Oracle comment on注释信息方法论》
  7. 家里没什么菜的飞鸽传书
  8. qpushbutton设置两个图标_宝马显示屏上的各种图标是啥意思,这里分享几个问的最多的!...
  9. 【你不能错过的数组基础知识整理】(学习笔记9--数组下)
  10. 蔬菜刀行业调研报告 - 市场现状分析与发展前景预测
  11. Ubuntu18 安装yum
  12. 关于SQL Server将一列的多行内容拼接成一行的问题讨论
  13. oracle 除数不能为0
  14. 【黑帽SEO系列】网页劫持
  15. [Spark进阶]--深入Spark Locality Level
  16. 如何删除PDF空白签名域?
  17. FFmpeg 音频转换
  18. 搜狐邮件服务器地址加密方式,手把手教你如何用SMIME加密任意邮件
  19. opencv实现车牌识别之字符分割
  20. 基督教的旧约圣经和新约圣经

热门文章

  1. 安卓图片手势缩放-源码
  2. SAR图像的干涉相位 matlab_时空双缝干涉
  3. Java 类和对象详述
  4. windows server 2012修改远程桌面端口方法
  5. 新概念英语1册19课
  6. 【云和恩墨大讲堂·七月新篇章】Oracle 12c Remote Filewatcher的实施
  7. 小程序体验版无法访问网络request:fail -2:net::ERR_FAILED
  8. 名帖169 李邕 行书《云麾将军碑》
  9. Medical Data for Machine Learning
  10. 当 ITOA 遇上 OneAlert,企业可以至少每年节省 3600 小时!