Я создаю редактор игр для игры XNA, которую я создаю, чтобы принимать JPEG/PNG и выводить файл XNB с содержимым Texture2D.Сериализовать Texture2D программно в XNA
У меня есть свои собственные сериализаторы для моих пользовательских и т.д., и я копал все вниз, вызывая ContentCompiler с помощью отражения и т.д., пошли в настоящие грязные биты, и я CAN на самом деле получить эту часть работает для моих собственных форматов. Но теперь мне нужно сериализовать в обычный формат Texture2D, который XNA умеет компилировать (в Visual Studio при создании проекта) и загружать (в игре с наиболее используемым методом Content.Load. Я не хочу создавать свой собственный образ формат файла для этого, очевидно. Когда я пытаюсь скомпилировать Texture2D, он не дает мне ошибку, он создает файл XNB, но содержимое файла не является данным изображения, это всего лишь 3-4 КБ накладных расходов (что я думаю, что это другие, не-изображения свойства объекта Texture2D)
Вот код, который я использую для компиляции:.
protected void InitializeWriter()
{
Type compilerType = typeof(ContentCompiler);
cc = compilerType.GetConstructors(BindingFlags.NonPublic | BindingFlags.Instance)[0].Invoke(null) as ContentCompiler;
compileMethod = compilerType.GetMethod("Compile", BindingFlags.NonPublic | BindingFlags.Instance);
}
internal void Write(string objectName, string path, object objectToWrite)
{
if (basePath == null)
{
throw new InvalidOperationException("The base path to write has not been set.");
}
if (cc == null) { InitializeWriter(); }
string fullPath = Path.Combine(basePath, path, objectName + ".xnb");
using (FileStream fs = File.Create(fullPath))
{
compileMethod.Invoke(cc, new object[]{
fs, objectToWrite, TargetPlatform.Windows, GraphicsProfile.Reach, false/*true*/, fullPath, fullPath
});
}
}
У меня есть свои собственные процессоры контента и этот код работает с ними безупречно Это. просто вызывает метод компиляции ContentCompiler , но используя Reflection (поскольку это внутренний класс).
Я не понимаю, почему Texture2D сериализуется, но без фактических данных растрового изображения.
Thanks, Can.
EDIT К сожалению, он не компилируется Texture2D (он жалуется на циклическую ссылки моего GraphicsDevice), если я пытаюсь скомпилировать объект Bitmap, он компилируется без ошибок, но не сериализовать фактические данные растрового изображения)
Как я могу импортировать TextureImporter в мои ссылки на проекты, вы тоже можете это объяснить? Благодаря ! – icaptan
ссылается на сборку XNA Content Pipeline. –
Я не могу найти ссылки на сборку XnaContentPipeline на XNA 4.0, где я пытаюсь добавить ее в проект. можете ли вы дать полное имя? благодаря ! – icaptan