Performance XNA纹理加载速度(适用于超大纹理尺寸)

Performance XNA纹理加载速度(适用于超大纹理尺寸),performance,xna,size,textures,Performance,Xna,Size,Textures,[仅针对问题跳至底部] 在开发XNA游戏时,我遇到了另一个可怕的XNA限制:Texture2D-s(至少在我的电脑上)的尺寸不能高于2048*2048。没问题,我很快编写了我的自定义纹理类,它默认使用[System.Drawing.]位图,并最终将纹理分割成更小的纹理2D-s,并根据需要显示它们 当我做这个更改时,我还必须更新加载纹理的方法。在旧版本中加载Texture2D-s时,我使用了Texture2D.FromStream(),它工作得很好,但XNA似乎无法存储/加载高于限制的纹理,因此如

[仅针对问题跳至底部]

在开发XNA游戏时,我遇到了另一个可怕的XNA限制:Texture2D-s(至少在我的电脑上)的尺寸不能高于2048*2048。没问题,我很快编写了我的自定义纹理类,它默认使用[System.Drawing.]位图,并最终将纹理分割成更小的纹理2D-s,并根据需要显示它们

当我做这个更改时,我还必须更新加载纹理的方法。在旧版本中加载Texture2D-s时,我使用了Texture2D.FromStream(),它工作得很好,但XNA似乎无法存储/加载高于限制的纹理,因此如果我尝试加载/存储4092*2048 png文件,我的应用程序中就会出现2048*2048 Texture2D。因此,我切换到使用[System.Drawing.]Image.FromFile加载图像,然后将其转换为位图,因为它似乎没有任何限制。(稍后将此位图转换为纹理2D列表。)

问题是,以这种方式加载纹理的速度明显较慢,因为现在即使是那些低于2048*2048限制的图像也将作为位图加载,然后转换为纹理2D。因此,我实际上在寻找一种方法来分析图像文件,并在将其加载到应用程序之前检查其尺寸(宽度;高度)。因为如果它在纹理限制下,我可以直接将其加载到Texture2D中,而无需将其加载到位图中,然后将其转换为单元素Texture2D列表


是否有任何(干净且可能非常快速)的方法可以在不将整个文件加载到应用程序的情况下获取图像文件的尺寸?如果是,它是否值得使用?我猜最慢的指令是在这里打开/查找文件(对于hdd-s,可能是基于硬件的),而不是将内容流式传输到应用程序中。

您需要支持任意大的纹理吗?如果没有,切换到HiDef配置文件将获得对4096x4096大小纹理的支持

如果您确实需要坚持使用当前的技术,您可能希望了解如何在不加载整个文件的情况下读取图像大小