- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
下午好!
在DirectX中我是初学者,很多东西我都不知道。
我在视频卡的内存中有一个 RGBA 格式的纹理 (DXGI_FORMAT_R8G8B8A8_UNORM)。这是截获的游戏缓冲区。在将其内容复制到计算机内存之前,我需要对此纹理进行转换格式为 BGRA (DXGI_FORMAT_B8G8R8A8_UNORM)。如何将纹理从一种像素格式转换为另一种像素格式视频卡的方式?
// DXGI_FORMAT_R8G8B8A8_UNORM
ID3D11Texture2D *pTexture1;
// DXGI_FORMAT_B8G8R8A8_UNORM
ID3D11Texture2D *pTexture2;
D3D11_TEXTURE2D_DESC desc2 = {};
desc2.Width = swapChainDesc.BufferDesc.Width;
desc2.Height = swapChainDesc.BufferDesc.Height;
desc2.MipLevels = 1;
desc2.ArraySize = 1;
desc2.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
desc2.BindFlags = D3D10_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET;
desc2.SampleDesc.Count = 1;
desc2.Usage = D3D11_USAGE_DEFAULT;
desc2.MiscFlags = 0;
void pixelConvert(ID3D11Texture2D *pTexture1, ID3D11Texture2D *pTexture2)
{
//
// Code....
//
}
我不明白这个解决方案: DX11 convert pixel format BGRA to RGBA不完整
最佳答案
在 GPU 上,简单的解决方案是将纹理作为“全屏四边形”渲染到另一个渲染目标。不需要任何专门的着色器,它只是简单的渲染。当您加载纹理时,如果需要,它会“混合”到标准的红色、绿色和蓝色 channel ,并且当您写入渲染目标时,会发生相同的事情,具体取决于格式。
See
SpriteBatch
in DirectX Tool Kit, and this tutorial in particular if you need a solution that works on all Direct3D Hardware Feature Levels. If you can requireD3D_FEATURE_LEVEL_10_0
or later, then seePostProcess
which is optimized for the fact that you are always drawing the quad to the entire render target.If you want a CPU solution, see DirectXTex.
关于c++ - DirectX。如何将纹理从一种像素格式转换为另一种像素格式(RGBA -> BGRA)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46362247/
Closed. This question needs details or clarity。它当前不接受答案。
所以,我在用 C++ 和 DirectX 11 开发游戏引擎,我注意到人们通常使用 BGRA 而不是 RGBA 作为 SwapChain 格式。人们为什么那样做?为什么是 32 位颜色而不是 256
所以,我在用 C++ 和 DirectX 11 开发游戏引擎,我注意到人们通常使用 BGRA 而不是 RGBA 作为 SwapChain 格式。人们为什么那样做?为什么是 32 位颜色而不是 256
我有一个缓冲区,其中包含一个“原始”BGRA 纹理,每种颜色一个字节。线条顺序相反(纹理颠倒)。 BGRA 缓冲区全是绿色 (0, 255, 0, 255)。 我需要将其转换为 RGBA 并翻转纹理线
我正在阅读 this tutorial关于从 iPhone 相机获取像素数据。 虽然运行和使用此代码没有问题,但我需要获取相机数据的输出(来自 BGRA)并将其转换为 ARGB,以便我可以将其与外部库
下午好! 在DirectX中我是初学者,很多东西我都不知道。 我在视频卡的内存中有一个 RGBA 格式的纹理 (DXGI_FORMAT_R8G8B8A8_UNORM)。这是截获的游戏缓冲区。在将其内容
我有一个 BGRA 数组,需要将其绘制到 Canvas 上。 目前我正在这样做: var aVal = returnedFromChromeWorker; var can = doc.createEl
我的目的是录屏。我正在使用 Windows DXGI API 接收屏幕截图,并使用 libx264 将屏幕截图编码为视频。将 BGRA 图像直接馈送到 libx264 会在输出视频中产生奇怪的颜色。因
有人可以解释以下三个函数之间的区别吗? typedef union { std::uint8_t B, G, R, A; std::uint32_t Colour; } BGRA; 第
我想使用 GPUImage 框架捕获原始像素数据进行操作。我这样捕获数据: CVImageBufferRef cameraFrame = CMSampleBufferGetImageBuffer(i
我将 BGRA 图像转储为以下格式(连续)的二进制文件:[(b, g, r, a), (b, g, r, a), (b, g, r, a ) ...]我知道图像的宽度、高度和 channel 数量(在
我想用iphone的相机拍一张原始图像数据,然后在笔记本电脑上用matlab或opencv进行后处理。所以我需要把这个原始图像数据从 iphone 带到笔记本电脑上。 目前,我使用 AVFoudnat
所以,我对刚刚运行的快速测试感到非常困惑。我正在用 C# 做一些图像处理。 Get/SetPixel() 已被证明太慢,所以我使用 LockBits 来获取原始数据。 但是,我似乎遇到了一个我无法弄清
在跟进之前关于将 RGB 转换为 RGBA 以及 ARGB 转换为 BGR 的一些问题后,我想使用 SSE 加快 RGB 到 BGRA 的转换.假设一台 32 位机器,并且想使用 intrinsics
在跟进之前关于将 RGB 转换为 RGBA 以及 ARGB 转换为 BGR 的一些问题后,我想使用 SSE 加快 RGB 到 BGRA 的转换.假设一台 32 位机器,并且想使用 intrinsics
我目前有一个问题,即库创建了 BGRA 像素格式的 DX11 纹理。 但是显示库只能正确显示RGBA。 (这意味着颜色在渲染图像中交换) 环顾四周后,我发现了一个简单的 for 循环来解决问题,但性能
我正在使用原始相机帧在 opengl 中进行一些视频处理。我告诉相机给我 BGRA,因为我听说这在 iPhone 上性能更高。现在,我知道原生相机格式是 YUV,但为了处理我正在做红绿蓝。 整个 BG
我正在使用 Metal 开发一个 iOS 应用程序,并且可以选择使用 RGBA 或 BGRA 作为纹理格式。该应用程序将是: 渲染成纹理 在屏幕上绘制纹理 从纹理生成UIImages 从UIImage
我有一个包含 BGRA 栅格数据的 byte[] 数组(例如,第一个字节 = 蓝色分量,第二个 = 绿色,第五个 = 下一个像素,蓝色),并且想使用它。 具体来说,是否有一个 Java 类已经被设计来
我正在开展一个项目,我使用 AVCaptureSession 捕获用户的视频输入。问题是我需要 BGRA 格式的输出以使用 OpenCV 渲染它,但随后我需要将其更改回默认的 420f 格式以将其显示
我是一名优秀的程序员,十分优秀!