本文整理汇总了C#中ContentManager.Save方法的典型用法代码示例。如果您正苦于以下问题:C# ContentManager.Save方法的具体用法?C# ContentManager.Save怎么用?C# ContentManager.Save使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ContentManager
的用法示例。
在下文中一共展示了ContentManager.Save方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: DoCommandOverride
/// <summary>
/// The method to override containing the actual command code. It is called by the <see cref="DoCommand" /> function
/// </summary>
/// <param name="commandContext">The command context.</param>
/// <returns>Task{ResultStatus}.</returns>
protected override async Task<ResultStatus> DoCommandOverride(ICommandContext commandContext)
{
var assetManager = new ContentManager();
while (Interlocked.Increment(ref spawnedCommands) >= 2)
{
Interlocked.Decrement(ref spawnedCommands);
await Task.Delay(1, CancellationToken);
}
try
{
object exportedObject;
switch (Mode)
{
case ExportMode.Animation:
exportedObject = ExportAnimation(commandContext, assetManager);
break;
case ExportMode.Skeleton:
exportedObject = ExportSkeleton(commandContext, assetManager);
break;
case ExportMode.Model:
exportedObject = ExportModel(commandContext, assetManager);
break;
default:
commandContext.Logger.Error("Unknown export type [{0}] {1}", Mode, ContextAsString);
return ResultStatus.Failed;
}
if (exportedObject != null)
assetManager.Save(Location, exportedObject);
commandContext.Logger.Verbose("The {0} has been successfully imported.", ContextAsString);
return ResultStatus.Successful;
}
catch (Exception ex)
{
commandContext.Logger.Error("Unexpected error while importing {0}", ex, ContextAsString);
return ResultStatus.Failed;
}
finally
{
Interlocked.Decrement(ref spawnedCommands);
}
}
示例2: ImportTextureImage
public static ResultStatus ImportTextureImage(TextureTool textureTool, TexImage texImage, ImportParameters parameters, CancellationToken cancellationToken, Logger logger)
{
var assetManager = new ContentManager();
// Apply transformations
textureTool.Decompress(texImage, parameters.IsSRgb);
// Special case when the input texture is monochromatic but it is supposed to be a color and we are working in SRGB
// In that case, we need to transform it to a supported SRGB format (R8G8B8A8_UNorm_SRgb)
// TODO: As part of a conversion phase, this code may be moved to a dedicated method in this class at some point
if (parameters.TextureHint == TextureHint.Color && parameters.IsSRgb && (texImage.Format == PixelFormat.R8_UNorm || texImage.Format == PixelFormat.A8_UNorm))
{
textureTool.Convert(texImage, PixelFormat.R8G8B8A8_UNorm_SRgb);
}
if (cancellationToken.IsCancellationRequested) // abort the process if cancellation is demanded
return ResultStatus.Cancelled;
var fromSize = new Size2(texImage.Width, texImage.Height);
var targetSize = parameters.DesiredSize;
// Resize the image
if (parameters.IsSizeInPercentage)
{
targetSize = new Size2((int)(fromSize.Width * targetSize.Width / 100.0f), (int)(fromSize.Height * targetSize.Height / 100.0f));
}
// determine the alpha format of the texture when set to Auto
// Note: this has to be done before the ColorKey transformation in order to be able to take advantage of image file AlphaDepth information
if (parameters.DesiredAlpha == AlphaFormat.Auto)
{
var colorKey = parameters.ColorKeyEnabled ? (Color?)parameters.ColorKeyColor : null;
var alphaLevel = textureTool.GetAlphaLevels(texImage, new Rectangle(0, 0, texImage.Width, texImage.Height), colorKey, logger);
parameters.DesiredAlpha = alphaLevel.ToAlphaFormat();
}
// Find the target size
var outputFormat = DetermineOutputFormat(parameters, targetSize, texImage.Format);
targetSize = FindBestTextureSize(parameters, outputFormat, targetSize, logger);
// Resize the image only if needed
if (targetSize != fromSize)
{
textureTool.Resize(texImage, targetSize.Width, targetSize.Height, Filter.Rescaling.Lanczos3);
}
if (cancellationToken.IsCancellationRequested) // abort the process if cancellation is demanded
return ResultStatus.Cancelled;
// Apply the color key
if (parameters.ColorKeyEnabled)
textureTool.ColorKey(texImage, parameters.ColorKeyColor);
if (cancellationToken.IsCancellationRequested) // abort the process if cancellation is demanded
return ResultStatus.Cancelled;
// Pre-multiply alpha only for relevant formats
if (parameters.PremultiplyAlpha && texImage.Format.HasAlpha32Bits())
textureTool.PreMultiplyAlpha(texImage);
if (cancellationToken.IsCancellationRequested) // abort the process if cancellation is demanded
return ResultStatus.Cancelled;
// Generate mipmaps
if (parameters.GenerateMipmaps)
{
var boxFilteringIsSupported = !texImage.Format.IsSRgb() || (MathUtil.IsPow2(targetSize.Width) && MathUtil.IsPow2(targetSize.Height));
textureTool.GenerateMipMaps(texImage, boxFilteringIsSupported? Filter.MipMapGeneration.Box: Filter.MipMapGeneration.Linear);
}
if (cancellationToken.IsCancellationRequested) // abort the process if cancellation is demanded
return ResultStatus.Cancelled;
// Convert/Compress to output format
// TODO: Change alphaFormat depending on actual image content (auto-detection)?
outputFormat = DetermineOutputFormat(parameters, targetSize, texImage.Format);
textureTool.Compress(texImage, outputFormat, (TextureConverter.Requests.TextureQuality)parameters.TextureQuality);
if (cancellationToken.IsCancellationRequested) // abort the process if cancellation is demanded
return ResultStatus.Cancelled;
// Save the texture
using (var outputImage = textureTool.ConvertToXenkoImage(texImage))
{
if (cancellationToken.IsCancellationRequested) // abort the process if cancellation is demanded
return ResultStatus.Cancelled;
assetManager.Save(parameters.OutputUrl, outputImage.ToSerializableVersion());
logger.Verbose("Compression successful [{3}] to ({0}x{1},{2})", outputImage.Description.Width, outputImage.Description.Height, outputImage.Description.Format, parameters.OutputUrl);
}
return ResultStatus.Successful;
}
示例3: DoCommandOverride
protected override async Task<ResultStatus> DoCommandOverride(ICommandContext commandContext)
{
var assetManager = new ContentManager();
DataContainer result = null;
switch (Source.Type)
{
case UrlType.File:
using (var fileStream = new FileStream(Source.Path, FileMode.Open, FileAccess.Read))
{
if (!WaitDelay())
return ResultStatus.Cancelled;
result = DataContainer.Load(fileStream);
}
break;
case UrlType.ContentLink:
case UrlType.Content:
var container = assetManager.Load<DataContainer>(Source.Path);
if (!WaitDelay())
return ResultStatus.Cancelled;
result = container.Alterate();
break;
}
assetManager.Save(OutputUrl, result);
var tasksToWait = CommandsToSpawn.Select(commandContext.ScheduleAndExecuteCommand);
await Task.WhenAll(tasksToWait);
foreach (ObjectUrl inputDep in InputDependencies)
{
commandContext.RegisterInputDependency(inputDep);
}
return ResultStatus.Successful;
}