Пример #1
0
 /// <summary>
 /// Instantiates a <see cref="DDSImage"/> from the data of the specified DDS file.
 /// </summary>
 /// <param name="filePath">The file path of the DDS file to read.</param>
 public static DDSImage CreateFromFile(string filePath)
 {
     using (var reader = new DDSFileReader(filePath))
     {
         return(reader.Read());
     }
 }
Пример #2
0
        public void ReadingThrowsExceptionWhenMagicNumberIsInvalid()
        {
            var stream = new MemoryStream();

            var writer = new BinaryWriter(stream);

            writer.Write(DDSFile.MagicNumber + 1);

            // Flush data and reset stream position for reader
            writer.Flush();
            stream.Position = 0;

            var reader = new DDSFileReader(stream);

            Assert.Throws <InvalidOperationException>(() => reader.Read());

            reader.Dispose();
            writer.Dispose();
        }
Пример #3
0
        public void ReadImageFromMemory()
        {
            int imageWidth  = 4;
            int imageHeight = 4;
            var mainImage   = new byte[8] {
                1, 2, 3, 4, 5, 6, 7, 8
            };

            var stream = new MemoryStream();
            var writer = new BinaryWriter(stream);

            // Write the DDS "magic number"
            writer.Write(DDSFile.MagicNumber);

            // Write the header data structure directly to the buffer
            var header     = DDSFileWriter.CreateHeader(imageWidth, imageHeight, FourCC.BC1Unorm.Value);
            var headerData = new byte[Marshal.SizeOf(typeof(DDSFileHeader))];
            var handle     = GCHandle.Alloc(headerData, GCHandleType.Pinned);

            Marshal.StructureToPtr(header, handle.AddrOfPinnedObject(), true);

            writer.Write(headerData);

            // Write main image data
            writer.Write(mainImage);

            // Flush data and reset stream position for reader
            writer.Flush();
            stream.Position = 0;

            // Act against test stream
            var reader   = new DDSFileReader(stream);
            var ddsImage = reader.Read();

            Assert.AreEqual(imageWidth, ddsImage.Width);
            Assert.AreEqual(imageHeight, ddsImage.Height);
            CollectionAssert.AreEqual(mainImage, ddsImage.GetBuffer());

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