#c# #.net
#c# #.net
Вопрос:
Я пытаюсь реализовать систему для редактора игр, в которой он будет загружать предопределенную текстуру в библиотеку. Текстура использует собственный формат, который библиотека уже способна считывать, но в настоящее время поддерживает это только с использованием адреса и длины указателя в качестве входных данных.
В настоящее время я заставил его работать, переместив текстуру во временный файл, но это довольно неоптимизированный обходной путь. Мне было интересно, есть ли какой-либо конкретный способ получить адрес внутреннего файла, с потоком или без него. Вот мой текущий (рабочий) код, при необходимости я могу предоставить дополнительную информацию о том, как работает NodeFactory, но главное, что для правильной работы требуется адрес и длина.
var resourceName = ("BrawlLib.HardcodedFiles.metal00.tex0");
string listDefault = "";
using (Stream stream = assembly.GetManifestResourceStream(resourceName))
{
string file;
FileStream fstream = new FileStream((file = Path.GetTempFileName()), FileMode.OpenOrCreate);
stream.CopyTo(fstream);
tNode = NodeFactory.FromFile(null, file) as TEX0Node;
Texture.Attach(tNode, _palette);
}
Комментарии:
1. Поместите его в поток памяти, а затем установите нулевую позицию. Это должно быть то же самое, что чтение из файла.
2. Текущая реализация требует загрузки из структуры источника данных, объявленной как здесь . Реализация очень сильно привязана к наличию ненулевого адреса, который, насколько мне известно, я не могу получить из MemoryStream.
3. Возможно, есть способ преобразовать поток памяти в массив байтов и передать ссылку на этот массив? Или это было бы еще менее оптимизировано, чем текущая методология?