社区
游戏开发
帖子详情
关于 像素对齐 行间距pitch 的问题
chifagao
2011-07-18 11:05:18
行间距pitch 肯定不是 图像的宽度。 一般大于 图像的宽度
这个间隙 什么时候产生和什么阶段存在的? 是将 像素写入到 磁盘 还是读入到 内存是产生的?还是一直就存在。
图像在磁盘存储时 存不存在 间隙 ? 写入到磁盘是 将 间隙的字节和像素一起写入 还是只 写入 像素字节本身?
...全文
287
3
打赏
收藏
关于 像素对齐 行间距pitch 的问题
行间距pitch 肯定不是 图像的宽度。 一般大于 图像的宽度 这个间隙 什么时候产生和什么阶段存在的? 是将 像素写入到 磁盘 还是读入到 内存是产生的?还是一直就存在。 图像在磁盘存储时 存不存在 间隙 ? 写入到磁盘是 将 间隙的字节和像素一起写入 还是只 写入 像素字节本身?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xychzh
2011-07-20
打赏
举报
回复
修正上楼:
“像素格式也取决于创建时的格式”
应该是:
“像素格式取决于要保存的格式”
xychzh
2011-07-20
打赏
举报
回复
再补充一下,这个pitch的值是IDirect3DTexture9在加载纹理时决定的,从该值可以看到实际的纹理占了多少内存。跟图片本身的像素尺寸无关。
比如你不从图片加载,自己构造一个二维像素数据,加载到IDirect3DTexture9时,会根据你给的宽高,及像素格式来决定它要为这些像素如何分配内存,以获得最大性能。
关于写入到文件,我的测试结果是可能会和pitch一致,也可能不会
1:我加载了一个非2的次幂纹理,载入后被扩充成了2的次幂尺寸,然后保存纹理后,尺寸也是2的次幂,与pitch一致
2:我创建了一个1×1的D3DFMT_A1R5G5B5格式纹理,其pitch是4(而原本只有16位),保存到纹理后,图像宽度依然是1×1
这样可以得出的大致结论就是,宽高肯定是和创建后的宽高一致的,像素格式也取决于创建时的格式,而pitch应该只算是他纹理本身的内存组织方式。
以上都是由测试产生的想法,同样仅供参考。
xychzh
2011-07-20
打赏
举报
回复
一般情况下,如果禁用了2的次幂处理,则pitch就是图像原宽度的字节数,如果没禁用,则宽度就为缩放后的宽度字节数,
总之它总是等于图像创建完后通过GetLevelDesc()函数得到的宽度的字节数
以上都是通过测试D3DXCreateTextureFromFileEx()得出的大致结果。
另外,对于一些特殊格式,情况也会有所不一样,以CreateTexture()为例:
比如:
1×1、2×2的D3DFMT_A8L8格式纹理(16位)或者D3DFMT_L8(8位)纹理,其pitch始终是4字节,而且不管是否禁用了2的次幂限制,都是4字节。(似乎4是pitch的最低值)
可能是为了最大化的提升性能,所以,做了很多特殊的处理,总之是无规律的,无法用一个“公式”直接得到什么结论的,如果能把所有情况都测试一下,然后列个表,看看pitch的值到底都是多少,或许会更好一些。
一般读写纹理时用pitch做为图像一行的宽度就不会有什么问题。
我所知道的就是这些了,都是测试的结果,没看过SDK,对不对不能保证,你参考下吧。
图像间距
pitch
是什么?(linesize、stride)(指图像中的一行图像数据所占的存储空间的长度)
width 图像的宽度,就是
像素
的个数 间距(
pitch
) 在图像数据传输和显示的过程中有一个不常用的参数:间距。 它有很多的别名, 在使用d3d(Direct3D,是微软为提高3D游戏在Windows中的显示性能而开发的显示程序接口)显示的时候,它叫
pitch
; 在用ffmpeg解码的时候,它叫linesize; 在用ffmpeg转换格式的时候,它叫stride。 统一以间距来表示。 这个参数看起来似乎没什么用,因为它的值和图像的宽度一样。但是那是大多数情况下,一旦遇到它和宽度不一样的时候,如果你不了
图像Width和
Pitch
width 图像的宽度,就是
像素
的个数 间距(
pitch
) 在图像数据传输和显示的过程中有一个不常用的参数:间距。 它有很多的别名,在使用d3d显示的时候,它叫
pitch
;在用ffmpeg解码的时候,它叫linesize;在用ffmpeg转换格式的时候,它叫stride。统一以间距来表示。 这个参数看起来似乎没什么用,因为它的值和图像的宽度一样。但是那是大多数情况下...
Dxgi中关于DXGI_MAPPED_RECT中
Pitch
与Width差异
之前在网上查找的关于DXGI的截屏demo中成功实现了利用截屏来生成视频并进行屏幕广播,但是最近使用之前的demo时遇到了一个
问题
: ==》在一些机器上使用如下代码获取图像数据及其每行数据的
像素
数: IDXGISurface *hStagingSurf = NULL; DXGI_MAPPED_RECT mappedRect; hr = hStagingSurf->Map(&mappedRect, DXGI_MAP_READ); 可是发现如下
问题
,在一些机器上获取得到的mappedR
LCD——与LCD有关的基础知识
以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。
色彩空间与
像素
格式
在 V plane 的一行数据中,有 640 个样本,占用 640 个字节,stride 值是 640。其中,图像宽度表示图像宽度是多少个
像素
,分量数指当前 plane 包含多少个分量(如 rgb24 格式一个 plane 有 R、G、B 三个分量),单位本位宽度指某分量的一个样本在考虑
对齐
后在内存中占用的实际位数(例如位深 8 占 8 位宽,位深 10 实际占 16 位宽,
对齐
值与平台相关),水平子采样因子指在水平方向上每多少个
像素
采样出一个色度样本(亮度样本不进行下采样,所以采样因子总是 1)。
游戏开发
8,303
社区成员
23,682
社区内容
发帖
与我相关
我的任务
游戏开发
游戏开发相关内容讨论专区
复制链接
扫一扫
分享
社区描述
游戏开发相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章