2017-02-26 300 views
0

我一直在使用DirectXTex工具,并想知道是否可以使用texconv.exe向后,转换DDS -> TGA(或其他支持的格式)而不是TGA, BMP, PNG -> DDS。 要转换PNG图像DDS可以这样做:如何将dx10 dds图像转换为PNG使用DirectXTex

texconv -f <DXGI_FORMAT> source.png 

我期待这样的事情:

texconv source.dds output.png 

或者是有什么能够做到这一点?

回答

1

DirectXTex库当然可以将DDS转换为另一种图像格式,如PNG。请记住,DDS文件格式能够编码每种可能的Direct3D资源类型,并且DXGI_FORMAT,但PNG不是。

如果在这种情况下,source.dds是单个图像(即没有MIP贴图,没有阵列,没有立方体地图,而不是一个容积图)和source.dds的格式是supported WIC pixel formatsPNG中的一个的DXGI当量,那么这个工程:

如果
texconv source.dds -ft png 

很有可能它的编码为DX10扩展头,它不是一个WIC像素格式相当多数民众赞成由PNG编解码器的支持,所以你需要提供一个转换格式。类似:

texconv source.dds -ft png -f R8G8B8A8_UNORM 

如果source.dds具有MIP贴图,那么这些可以很容易地通过使用剥离出来:

texconv source.dds -m 1 -ft png -f R8G8B8A8_UNORM 

如果source.dds是立方贴图或纹理阵列中,问题是,png可以” t编码多个图像。你可以把它写为TIFF,其不支持多图像为:

texconv source.dds -m 1 -ft tif -f R8G8B8A8_UNORM 

我意识到,WIC作家的当前行为默认为使用多帧编码与行为不一致总是编写第一个图像的TGA和HDR编写器。我在this commit中添加了新的行为,以便WIC编写者也默认只写第一个图像,除非您使用-wicmulti。这将在下一个二进制版本中发布,但目前您需要同步master分支并自行构建以获得此新行为。

随着新版本,要获得多帧写,你会使用texconv source.dds -m 1 -ft tif -f R8G8B8A8_UNORM -wicmulti。如果您只想要第一张图片,则可以使用texconv source.dds -ft png -f R8G8B8A8_UNORM。这也消除了在只需要写入第一个图像的情况下明确使用-m 1的需要。

当立方体贴图处理,你可以使用texassemble工具将其转换为一个带或跨单个图像:

texassemble h-strip source.dds -o output.png -f R8G8B8A8_UNORM 

如果source.dds使用DXGI_FORMAT_*_SRGB格式,则在写它写入一个PNG它将编码sRGB块来指示色彩空间。这可能会或可能不会导致预期的外观。您可以明确地将其转换为非SRGB格式(这将发生在上面),您可以使用-f R8G8B8A8_UNORM_SRGB将其保留在sRGB色彩空间中,或者您可以使用-srgbi-srgbo开关将它“投射”到/从一个sRGB格式而不更改数据。

如果source.dds是高动态范围纹理(即R32G32B32A32_FLOAT等),则所得到的图像可能会被烧毁,将其转换为R8G8B8A8_UNORM。在这种情况下,您可以使用-tonemap开关。

有关更多详细信息,请参阅TexconvTexassemble

+0

感谢您的好评。你在第一个例子中犯了错误,你写了“=”而不是“ - ”:)顺便说一下,有没有办法设置输出(png)名称或/和路径? –

+0

谢谢。修正了错字。我使用了与DirectXTex''texconv''相同的设计作为最初的传统DirectX SDK工具,它真正用于'批量转换'。您可以使用'-o''提供输出目录,''-sx''添加文件名后缀,和/或''-px''添加文件名前缀。 –

+0

刚发现,为什么包含空格的路径无法工作?像目录“我的文件”被认为是“我的”“文件” –

相关问题