/// <summary> /// decode to image as an asynchronous operation. /// </summary> /// <param name="file">The file.</param> /// <returns>Image<Rgba32>[].</returns> public async Task <Image <Rgba32> > DecodeToImageAsync(DdsFile file) { Image <Rgba32> image = null; var decoder = new BcDecoder(); if (file.Faces.Count == 6) { // Cubemap var right = ColorMemoryToImage(await decoder.DecodeRaw2DAsync(file.Faces[0].MipMaps[0].Data, Convert.ToInt32(file.Faces[0].Width), Convert.ToInt32(file.Faces[0].Height), GetCompressionFormat(file, decoder.InputOptions))); var left = ColorMemoryToImage(await decoder.DecodeRaw2DAsync(file.Faces[1].MipMaps[0].Data, Convert.ToInt32(file.Faces[1].Width), Convert.ToInt32(file.Faces[1].Height), GetCompressionFormat(file, decoder.InputOptions))); var top = ColorMemoryToImage(await decoder.DecodeRaw2DAsync(file.Faces[2].MipMaps[0].Data, Convert.ToInt32(file.Faces[2].Width), Convert.ToInt32(file.Faces[2].Height), GetCompressionFormat(file, decoder.InputOptions))); var bottom = ColorMemoryToImage(await decoder.DecodeRaw2DAsync(file.Faces[3].MipMaps[0].Data, Convert.ToInt32(file.Faces[3].Width), Convert.ToInt32(file.Faces[3].Height), GetCompressionFormat(file, decoder.InputOptions))); var front = ColorMemoryToImage(await decoder.DecodeRaw2DAsync(file.Faces[4].MipMaps[0].Data, Convert.ToInt32(file.Faces[4].Width), Convert.ToInt32(file.Faces[4].Height), GetCompressionFormat(file, decoder.InputOptions))); var back = ColorMemoryToImage(await decoder.DecodeRaw2DAsync(file.Faces[5].MipMaps[0].Data, Convert.ToInt32(file.Faces[5].Width), Convert.ToInt32(file.Faces[5].Height), GetCompressionFormat(file, decoder.InputOptions))); var width = left.Width + front.Width + right.Width + back.Width; var height = top.Height + front.Height + bottom.Height; image = new Image <Rgba32>(width, height); image.Mutate(i => { i.DrawImage(top, new Point(left.Width, 0), 1f); i.DrawImage(left, new Point(0, top.Height), 1f); i.DrawImage(front, new Point(left.Width, top.Height), 1f); i.DrawImage(right, new Point(left.Width + front.Width, top.Height), 1f); i.DrawImage(back, new Point(left.Width + front.Width + right.Width, top.Height), 1f); i.DrawImage(bottom, new Point(left.Width, top.Height + front.Height), 1f); }); } else { var bcnImage = await decoder.Decode2DAsync(file); image = ColorMemoryToImage(bcnImage); } return(image); }
/// <summary> /// decode to image as an asynchronous operation. /// </summary> /// <param name="file">The file.</param> /// <returns>Image<Rgba32>[].</returns> public async Task <Image> DecodeToImageAsync(DdsFile file) { var decoder = new BcDecoder(); Image <Rgba32> image; if (file.Faces.Count == 6) { // Cubemap var right = ColorMemoryToImage(await decoder.DecodeRaw2DAsync(file.Faces[0].MipMaps[0].Data, Convert.ToInt32(file.Faces[0].Width), Convert.ToInt32(file.Faces[0].Height), GetCompressionFormat(file, decoder.InputOptions))); var left = ColorMemoryToImage(await decoder.DecodeRaw2DAsync(file.Faces[1].MipMaps[0].Data, Convert.ToInt32(file.Faces[1].Width), Convert.ToInt32(file.Faces[1].Height), GetCompressionFormat(file, decoder.InputOptions))); var top = ColorMemoryToImage(await decoder.DecodeRaw2DAsync(file.Faces[2].MipMaps[0].Data, Convert.ToInt32(file.Faces[2].Width), Convert.ToInt32(file.Faces[2].Height), GetCompressionFormat(file, decoder.InputOptions))); var bottom = ColorMemoryToImage(await decoder.DecodeRaw2DAsync(file.Faces[3].MipMaps[0].Data, Convert.ToInt32(file.Faces[3].Width), Convert.ToInt32(file.Faces[3].Height), GetCompressionFormat(file, decoder.InputOptions))); var front = ColorMemoryToImage(await decoder.DecodeRaw2DAsync(file.Faces[4].MipMaps[0].Data, Convert.ToInt32(file.Faces[4].Width), Convert.ToInt32(file.Faces[4].Height), GetCompressionFormat(file, decoder.InputOptions))); var back = ColorMemoryToImage(await decoder.DecodeRaw2DAsync(file.Faces[5].MipMaps[0].Data, Convert.ToInt32(file.Faces[5].Width), Convert.ToInt32(file.Faces[5].Height), GetCompressionFormat(file, decoder.InputOptions))); return(GetCubeMap(right, left, top, bottom, front, back)); } else { var bcnImage = await decoder.Decode2DAsync(file); image = ColorMemoryToImage(bcnImage); } return(image); }