Пример #1
0
        /// <summary>
        /// decode to image as an asynchronous operation.
        /// </summary>
        /// <param name="file">The file.</param>
        /// <returns>Image&lt;Rgba32&gt;[].</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);
        }
Пример #2
0
        /// <summary>
        /// decode to image as an asynchronous operation.
        /// </summary>
        /// <param name="file">The file.</param>
        /// <returns>Image&lt;Rgba32&gt;[].</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);
        }