Exemplo n.º 1
0
 public void Save(string fileName)
 {
     using (var writer = new DDSFileWriter(fileName))
     {
         writer.Write(this);
     }
 }
        public void WriteImageToMemory()
        {
            var format = new Mock <IBlockCompressionFormat>();

            format.Setup(f => f.FourCC).Returns(FourCC.BC1Unorm);

            var imageData = new byte[8] {
                1, 2, 3, 4, 5, 6, 7, 8
            };
            int imageWidth  = 4;
            int imageHeight = 4;

            var ddsImage = DDSImage.CreateFromData(imageWidth, imageHeight, imageData, format.Object);
            var stream   = new MemoryStream();
            var writer   = new DDSFileWriter(stream);

            writer.Write(ddsImage);

            // Reset stream position for read
            stream.Position = 0;

            var reader = new BinaryReader(stream);

            {
                int size        = Marshal.SizeOf(DDSFile.MagicNumber);
                var data        = reader.ReadBytes(size);
                var magicNumber = BitConverter.ToUInt32(data, 0);

                Assert.AreEqual(DDSFile.MagicNumber, magicNumber);
            }
            {
                int size   = Marshal.SizeOf(typeof(DDSFileHeader));
                var data   = reader.ReadBytes(size);
                var handle = GCHandle.Alloc(data, GCHandleType.Pinned);
                var header = (DDSFileHeader)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(DDSFileHeader));
                handle.Free();

                Assert.AreEqual(imageWidth, header.Width);
                Assert.AreEqual(imageHeight, header.Height);
            }
            {
                var data = reader.ReadBytes(imageData.Length);

                CollectionAssert.AreEqual(imageData, imageData);
            }

            writer.Dispose();
            reader.Dispose();
        }