[仅跳到底部的问题]
在开发我的 XNA 游戏时,我遇到了另一个可怕的 XNA 限制:Texture2D-s(至少在我的 PC 上)的尺寸不能高于 2048*2048。没问题,我很快就编写了我的自定义纹理类,它默认使用 [System.Drawing.] 位图,并最终将纹理分割成更小的 Texture2D-s,并根据需要显示它们。
当我进行此更改时,我还必须更新加载纹理的方法。在旧版本中加载 Texture2D-s 时,我使用 Texture2D.FromStream() 效果很好,但 XNA 似乎甚至无法存储/加载高于限制的纹理,所以如果我尝试加载/存储 4092*2048 png 文件我最终在我的应用程序中有一个 2048*2048 Texture2D。因此,我切换到使用 [System.Drawing.] Image.FromFile 加载图像,然后将其转换为位图,因为它似乎没有任何限制。(后来将此位图转换为 Texture2D 列表。)
问题是以这种方式加载纹理明显变慢,因为现在即使是那些低于 2048*2048 限制的图像也会作为位图加载,然后转换为 Texture2D。因此,我实际上正在寻找一种方法来分析图像文件并在将其加载到我的应用程序之前检查其尺寸(宽度;高度)。因为如果它在纹理限制之下,我可以直接将其加载到 Texture2D 中,而无需将其加载到 Bitmap 中,然后将其转换为单个元素 Texture2D 列表。
是否有任何(干净且可能非常快速)的方法来获取图像文件的尺寸,而无需将整个文件加载到应用程序中?如果是,它甚至值得使用吗?我猜最慢的指令是这里的文件打开/查找(可能是基于硬件的,当涉及到 hdd-s 时)而不是将内容流式传输到应用程序中。