- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将二维数组转换为 DDS 并将其保存到文件中。 Array 充满了 Color 结构(每个结构都有红色、绿色、蓝色和 alpha 分量)。一旦我将数组设置为正确的格式,我确信将它保存到文件部分不会有问题。
我可以为此使用库(只要它的许可证允许我在封闭源项目中使用它并在 Linux 和 Windows 上工作)或手动执行,如果我能找到一个不错的资源解释如何去做。
如果有人能指出正确的方向,我将不胜感激。
最佳答案
在 DirectDraw 中,您可以通过在 DDSURFACEDESC
结构中设置某些字段并将其传递给 的
接口(interface)。CreateSurface
方法,从内存中的数据创建表面>IDirectDraw
首先,您需要通过将dwFlags
字段设置为以下标志集来告诉DirectDraw DDSURFACEDESC
结构的哪些字段包含正确的信息:DDSD_WIDTH | DDSD_高度 | DDSD_像素格式 | DDSD_LPSURFACE | DDSD_PITCH
.
哦,这只适用于系统内存表面,所以可能需要在 ddsCaps.dwCaps
字段中添加 DDSCAPS_SYSTEMMEMORY
标志(如果 DirectDraw 不会默认情况下执行此操作)。
然后您在lpSurface
字段中指定像素数据数组的起始地址。如果您的缓冲区是连续的,只需将 lPitch
设置为 0。否则您可以在那里设置正确的间距(两个后续扫描线的开头之间的字节距离)。
在 ddpfPixelFormat
字段中设置正确的像素格式,在 dwRGBBitCount
中设置正确的位深度,在 dwRBitMask
中设置正确的 RGB 掩码,dwGBitMask
和 dwBBitMask
。
然后将 lXPitch
设置为像素的字节数(RGB 为 3)。这取决于您使用的像素格式。
然后将填充的结构传递给CreateSurface
,看看是否有效。
当您以这种方式创建表面时,请记住 DirectDraw 不会自己管理其数据缓冲区,并且一旦您在表面上调用 Release
就不会释放此内存。当 Surface 不再使用此内存时,您需要自行释放它。
另一方面,如果你想让这个像素数据放在显存中,你需要以通常的方式创建一个离屏表面然后锁定它,将你的像素复制到显存中它自己的缓冲区(你'我们会在 lpSurface
字段中找到它的地址,并记得将 lPitch
计算在内!),然后解锁它。
关于c++ - 在 C++ 中从头开始创建 DirectDraw 表面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17123947/
我需要用这样的数据构建一个表: ┌────────┬───────────┬────────┐ │ ID │ Name │ Age │ ├────
我是一名优秀的程序员,十分优秀!