Exemplo n.º 1
0
        public static bool ConvertFromDdsAndSave(Stream ms, string outfilename, ESaveFileTypes filetype, bool vflip = false, bool hflip = false)
        {
            byte[] rentedBuffer = null;
            try
            {
                var offset = 0;

                var len = checked ((int)ms.Length);
                rentedBuffer = ArrayPool <byte> .Shared.Rent(len);

                int readBytes;
                while (offset < len &&
                       (readBytes = ms.Read(rentedBuffer, offset, len - offset)) > 0)
                {
                    offset += readBytes;
                }

                var outDir = new FileInfo(outfilename).Directory.FullName;
                Directory.CreateDirectory(outDir);
                var fileName  = Path.GetFileNameWithoutExtension(outfilename);
                var extension = filetype.ToString().ToLower();
                var newpath   = Path.Combine(outDir, $"{fileName}.{extension}");

                //TexconvNative.ConvertAndSaveDdsImage(rentedBuffer, newpath, filetype, vflip, hflip);
                if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
                {
                    var buffer = Array.Empty <byte>();
                    using (var blob = new ManagedBlob())
                    {
                        var l = TexconvNative.ConvertFromDds(rentedBuffer, blob.GetBlob(), filetype, vflip, hflip);
                        buffer = blob.GetBytes();
                    }
                    File.WriteAllBytes(newpath, buffer);
                }
                else
                {
                    throw new NotImplementedException();
                }
            }
            finally
            {
                if (rentedBuffer is object)
                {
                    ArrayPool <byte> .Shared.Return(rentedBuffer);
                }
            }

            return(true);
        }
Exemplo n.º 2
0
 public static long ConvertToDds(byte[] inBuff, Blob blob, ESaveFileTypes filetype, DXGI_FORMAT format, bool vflip = false, bool hflip = false)
 => _ConvertToDds(inBuff, inBuff.Length, blob, filetype, format, vflip, hflip);
Exemplo n.º 3
0
 public static long ConvertFromDds(byte[] inBuffer, Blob blob, ESaveFileTypes filetype, bool vflip = false, bool hflip = false)
 => _ConvertFromDds(inBuffer, inBuffer.Length, blob, filetype, vflip, hflip);
Exemplo n.º 4
0
 private static extern long _ConvertToDds(byte[] inBuff, int inBufferLength, Blob blob, ESaveFileTypes filetype, DXGI_FORMAT format, bool vflip, bool hflip);
Exemplo n.º 5
0
 private static extern long _ConvertFromDds(byte[] inBuffer, int inBufferLength, Blob blob, ESaveFileTypes filetype, bool vflip = false, bool hflip = false);