- 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/
有人有 DirectDraw 叠加的工作示例(代码)吗?就像屏幕上移动的东西一样。我一直试图找到 DirectDraw 叠加用法的示例,但未能找到。 谢谢。 最佳答案 尝试其中一些: from gam
只是一个简单的 blt 函数: RECT dstRect = {dstL, dstT, dstR, dstB}; RECT srcRect = {srcL, srcT, srcR, srcB}; HR
问题 Windows Mobile / Directdraw: Rotate video stream 视频预览正常,我现在需要的是旋转图像的方法。我认为处理此问题的唯一方法是编写一个基于 CTran
我正在使用 WS_EX_LAYERED 创建一个窗口,并使用 SetLayeredWindowAttributes() 为其设置颜色键。我可以通过在窗口内使用 FillRect() 绘制一个简单的矩形
我正在修改一个旧的 Windows DirectDraw 游戏。我已经创建了一个 DirectDraw 代理。它记录每个 IDirectDraw 和 IDirectDrawSurface 调用。后台缓
我们正在维护一个使用 DirectDraw 的全屏 256 色图形模式的旧视频游戏。问题是,某些在后台运行的应用程序有时会在游戏运行时尝试更改系统调色板,从而导致图形损坏。 我们可以(有时)通过处理
Opengl 纹理坐标 [0,0] 位于左下角。 DDS 文件是否包含有关数据布局的信息(如果数据从左上角或左下角开始)或有一个固定的布局?例如 ktx 文件包含此类信息。 最佳答案 DDS 文件格式
我需要做一个简单的检查 dds 文件的格式是否有效。我只需要对 dds 文件进行一般检查,所以我不需要检查它是否是 dxt1、dxt5、dx10 等。例如,如果我有一个 png 图像并且我将扩展名重命
我正在使用一个全屏应用程序,该应用程序使用 DirectDraw 函数进行显示并且工作正常。现在我想用自己的窗口显示另一个应用程序,但另一个应用程序在启动时隐藏在全屏 Direct Draw 应用程序
昨天我找到了多年前用 C++、Win32 API 和 DirectDraw 7 开发的俄罗斯方 block 游戏的源代码。我尝试构建解决方案但没有成功,因为最近的 DirectX SDK (June
首先,我正在编写一个游戏。目前在渲染函数中有两个调用两个不同的函数。一个渲染一些文本,一个渲染 Sprite 。 在我的电脑上(AMD Phenom(tm) II X4 955 处理器(4 个 CPU
这是How do you draw text in DirectX 11?的后续问题 在 Direct3D-12 中,事情变得更加复杂,而且由于它是新的,我在网上找不到任何合适的库。 我正在构建一个基
当使用CachedBitmaps时在 GDIPlus 中,如果 Windows 视频“硬件加速”降低太多,则会出现图形损坏 - 例如禁用 DirectDraw: 硬件加速有六个级别: 禁用所有加速 禁
我正在尝试将二维数组转换为 DDS 并将其保存到文件中。 Array 充满了 Color 结构(每个结构都有红色、绿色、蓝色和 alpha 分量)。一旦我将数组设置为正确的格式,我确信将它保存到文件部
我正在开发一个视频录制应用程序,我想用 Logo 和录制计时器覆盖视频预览。 我尝试运行全屏应用程序,一切正常。然后我尝试将该应用程序作为常规 Windows 应用程序运行,但它返回了一个错误。 如果
我正在构建一个应用程序,它根据提供的两张图片(非 3D 模型)在 200 Hz 屏幕上绘制立体图像(立体图像)。所以重绘的速度完整性非常重要。我使用 DirectDraw 表面及其 Flip() 取得
当我执行 DirectDraw 方法失败时,如何在 DirectX 7 中获取失败错误字符串? if (FAILED(lpddPrimarySurface->SetPalette(lpddPalett
我有一个应用程序,在我的控制之外,几个 Windows 窗体设置了 TransparencyKey 属性。当这些窗口覆盖(在前面)另一个具有 DirectDraw 视频表面的窗体时,前景窗体会闪烁(部
这是我第一次使用 PHP Imagick 并遇到了问题。 我正在创建一个网站模块,用户可以在其中上传需要转换为包含上传图像作为 DDS 纹理的加密文件类型的图像。 所以我需要做的是将上传的图片转换为d
DDS 格式已经为 directX 制作好了吗?所以我猜应该针对它而不是针对 openGL 进行优化。 那么,还有另一种格式吗?如果是,什么格式是一个不错的选择?什么原因? 另外,因为我在 linux
我是一名优秀的程序员,十分优秀!