public void CreateFileHeaderForBC1() { var expectedFlags = DDSFileHeaderFlags.DDSD_CAPS | DDSFileHeaderFlags.DDSD_HEIGHT | DDSFileHeaderFlags.DDSD_WIDTH | DDSFileHeaderFlags.DDSD_PIXELFORMAT; var expectedPixelFormat = new DDSPixelFormat { Size = 32, Flags = DDSPixelFormatFlags.DDPF_FOURCC, FourCC = FourCC.BC1Unorm.Value }; var header = DDSFileWriter.CreateHeader(1024, 512, FourCC.BC1Unorm.Value); Assert.AreEqual(124, header.Size); Assert.AreEqual(expectedFlags, header.Flags); Assert.AreEqual(512, header.Height); Assert.AreEqual(1024, header.Width); Assert.AreEqual(0, header.PitchOrLinearSize); Assert.AreEqual(0, header.Depth); Assert.AreEqual(0, header.MipMapCount); unsafe { Assert.AreEqual(0, header.Reserved1[0]); Assert.AreEqual(0, header.Reserved1[1]); Assert.AreEqual(0, header.Reserved1[2]); Assert.AreEqual(0, header.Reserved1[3]); Assert.AreEqual(0, header.Reserved1[4]); Assert.AreEqual(0, header.Reserved1[5]); Assert.AreEqual(0, header.Reserved1[6]); Assert.AreEqual(0, header.Reserved1[7]); Assert.AreEqual(0, header.Reserved1[8]); Assert.AreEqual(0, header.Reserved1[9]); Assert.AreEqual(0, header.Reserved1[10]); } Assert.AreEqual(DDSCapsFlags.DDSCAPS_TEXTURE, header.Caps); Assert.AreEqual(0, header.Caps2); Assert.AreEqual(0, header.Caps3); Assert.AreEqual(0, header.Caps4); Assert.AreEqual(0, header.Reserved2); Assert.AreEqual(expectedPixelFormat.Size, header.PixelFormat.Size); Assert.AreEqual(expectedPixelFormat.Flags, header.PixelFormat.Flags); Assert.AreEqual(expectedPixelFormat.FourCC, header.PixelFormat.FourCC); Assert.AreEqual(0, header.PixelFormat.RGBBitCount); Assert.AreEqual(0, header.PixelFormat.RBitMask); Assert.AreEqual(0, header.PixelFormat.GBitMask); Assert.AreEqual(0, header.PixelFormat.BBitMask); Assert.AreEqual(0, header.PixelFormat.ABitMask); }
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(); }