如何使用 DirectXTex 将 dx10 dds 图像转换为 png
how to convert dx10 dds image to png using DirectXTex
我一直在使用 DirectXTex 工具,想知道是否可以反向使用 texconv.exe
,转换 DDS -> TGA
(或其他支持的格式)而不是 TGA, BMP, PNG -> DDS
。
将 PNG 图像转换为 DDS 可以像这样完成:
texconv -f <DXGI_FORMAT> source.png
我正在寻找这样的东西:
texconv source.dds output.png
或者有什么办法可以做到吗?
DirectXTex 库当然可以将 DDS
转换为另一种图像格式,如 PNG
。请记住,DDS
文件格式能够对所有可能的 Direct3D 资源类型进行编码,DXGI_FORMAT
,但 PNG
不能。
如果本例中的 source.dds
是单个图像(即没有 mipmap、没有数组、没有立方体贴图、不是体积贴图)并且 source.dds
的格式是 [= PNG
的 supported WIC pixel formats 之一的 65=],那么这有效:
texconv source.dds -ft png
如果它被编码为 DX10
扩展 header,它可能不是 PNG
编解码器支持的等效 WIC 像素格式,因此您需要提供转换格式。类似于:
texconv source.dds -ft png -f R8G8B8A8_UNORM
如果 source.dds
有 mipmap,那么可以使用以下方法轻松去除它们:
texconv source.dds -m 1 -ft png -f R8G8B8A8_UNORM
如果 source.dds
是立方体贴图或纹理数组,问题是 png
无法编码多个图像。你可以把它写成 TIFF,它支持 multi-image as:
texconv source.dds -m 1 -ft tif -f R8G8B8A8_UNORM
I realized that the current behavior of the WIC writer to default to using multi-frame encoding is inconsistent with the behavior of the TGA and HDR writers which always write the first image. I added new behavior in this commit so that the WIC writer also defaults to writing just the first image unless you use -wicmulti
. This will be in the next binary release, but currently you need to sync the master branch and build it yourself to get this new behavior.
With the new version, to get a multiframe write you'd use texconv source.dds -m 1 -ft tif -f R8G8B8A8_UNORM -wicmulti
. If you just want the first image, you can use texconv source.dds -ft png -f R8G8B8A8_UNORM
. This also removes the need to explicitly use -m 1
in the case where you just want the first image written.
在处理立方体贴图时,可以利用texassemble
工具将其转换为条形或十字单图:
texassemble h-strip source.dds -o output.png -f R8G8B8A8_UNORM
如果 source.dds
是使用 DXGI_FORMAT_*_SRGB
格式编写的,那么当它写入 PNG
时,它将对 sRGB 块进行编码以指示色彩空间。这可能会或可能不会导致预期的外观。您可以将其显式转换为 non-SRGB 格式(如上所示),您可以使用 -f R8G8B8A8_UNORM_SRGB
将其保留在 sRGB 色彩空间中,或者您可以使用 -srgbi
或 -srgbo
切换到 'cast' 它 to/from sRGB 格式而不更改数据。
如果 source.dds
是 High-Dynamic 范围纹理(即 R32G32B32A32_FLOAT
等),则生成的图像可能 blown-out 将其转换为 R8G8B8A8_UNORM
.在这种情况下,您可以使用 -tonemap
开关。
See Texconv and Texassemble for more details.
我一直在使用 DirectXTex 工具,想知道是否可以反向使用 texconv.exe
,转换 DDS -> TGA
(或其他支持的格式)而不是 TGA, BMP, PNG -> DDS
。
将 PNG 图像转换为 DDS 可以像这样完成:
texconv -f <DXGI_FORMAT> source.png
我正在寻找这样的东西:
texconv source.dds output.png
或者有什么办法可以做到吗?
DirectXTex 库当然可以将 DDS
转换为另一种图像格式,如 PNG
。请记住,DDS
文件格式能够对所有可能的 Direct3D 资源类型进行编码,DXGI_FORMAT
,但 PNG
不能。
如果本例中的 source.dds
是单个图像(即没有 mipmap、没有数组、没有立方体贴图、不是体积贴图)并且 source.dds
的格式是 [= PNG
的 supported WIC pixel formats 之一的 65=],那么这有效:
texconv source.dds -ft png
如果它被编码为 DX10
扩展 header,它可能不是 PNG
编解码器支持的等效 WIC 像素格式,因此您需要提供转换格式。类似于:
texconv source.dds -ft png -f R8G8B8A8_UNORM
如果 source.dds
有 mipmap,那么可以使用以下方法轻松去除它们:
texconv source.dds -m 1 -ft png -f R8G8B8A8_UNORM
如果 source.dds
是立方体贴图或纹理数组,问题是 png
无法编码多个图像。你可以把它写成 TIFF,它支持 multi-image as:
texconv source.dds -m 1 -ft tif -f R8G8B8A8_UNORM
I realized that the current behavior of the WIC writer to default to using multi-frame encoding is inconsistent with the behavior of the TGA and HDR writers which always write the first image. I added new behavior in this commit so that the WIC writer also defaults to writing just the first image unless you use
-wicmulti
. This will be in the next binary release, but currently you need to sync the master branch and build it yourself to get this new behavior.With the new version, to get a multiframe write you'd use
texconv source.dds -m 1 -ft tif -f R8G8B8A8_UNORM -wicmulti
. If you just want the first image, you can usetexconv source.dds -ft png -f R8G8B8A8_UNORM
. This also removes the need to explicitly use-m 1
in the case where you just want the first image written.
在处理立方体贴图时,可以利用texassemble
工具将其转换为条形或十字单图:
texassemble h-strip source.dds -o output.png -f R8G8B8A8_UNORM
如果 source.dds
是使用 DXGI_FORMAT_*_SRGB
格式编写的,那么当它写入 PNG
时,它将对 sRGB 块进行编码以指示色彩空间。这可能会或可能不会导致预期的外观。您可以将其显式转换为 non-SRGB 格式(如上所示),您可以使用 -f R8G8B8A8_UNORM_SRGB
将其保留在 sRGB 色彩空间中,或者您可以使用 -srgbi
或 -srgbo
切换到 'cast' 它 to/from sRGB 格式而不更改数据。
如果 source.dds
是 High-Dynamic 范围纹理(即 R32G32B32A32_FLOAT
等),则生成的图像可能 blown-out 将其转换为 R8G8B8A8_UNORM
.在这种情况下,您可以使用 -tonemap
开关。
See Texconv and Texassemble for more details.