コード例 #1
0
ファイル: PNGWriter.cs プロジェクト: swipswaps/PixelVision8
        //        private int width;
        //        private int height;

        public void Write(int width1, int height1, Stream outputStream, Color[] colors)
        {
            width  = width1;
            height = height1;

            colorData = colors;

            //        switch (texture2D.Format)
            //        {
            //          case SurfaceFormat.Color:
            //        texture2D.GetData(colorData);
            //
            //        GetColorData(texture2D);


            outputStream.Write(HeaderChunk.PngSignature, 0, HeaderChunk.PngSignature.Length);
            var buffer1 = new HeaderChunk
            {
                Width             = (uint)width1,
                Height            = (uint)height1,
                BitDepth          = 8,
                ColorType         = colorType,
                CompressionMethod = 0,
                FilterMethod      = 0,
                InterlaceMethod   = 0
            }.Encode();

            outputStream.Write(buffer1, 0, buffer1.Length);
            var buffer2      = EncodePixelData();
            var memoryStream = new MemoryStream();

            try
            {
                using (var zlibStream = new ZlibStream(new MemoryStream(buffer2), CompressionMode.Compress))
                {
                    zlibStream.CopyTo(memoryStream);
                }
            }
            catch (Exception ex)
            {
                throw new Exception("An error occurred during DEFLATE compression.", ex);
            }

            var dataChunk = new DataChunk
            {
                Data = memoryStream.ToArray()
            };
            var buffer3 = dataChunk.Encode();

            outputStream.Write(buffer3, 0, buffer3.Length);
            var buffer4 = new EndChunk().Encode();

            outputStream.Write(buffer4, 0, buffer4.Length);
        }
コード例 #2
0
ファイル: VaultWriter.cs プロジェクト: funk-yourself/VaultLib
        private Stream BuildVltStream()
        {
            MemoryStream ms = new MemoryStream(8192);
            BinaryWriter bw = new BinaryWriter(ms);
            ChunkWriter  cw = new ChunkWriter(bw, Vault);

            var versionChunk = new VltVersionChunk();

            cw.WriteChunk(versionChunk);

            var startChunk = new VltStartChunk();

            cw.WriteChunk(startChunk);

            var dependencyChunk = new VltDependencyChunk(new List <string>
            {
                $"{Vault.Name}.vlt",
                $"{Vault.Name}.bin"
            });

            cw.WriteChunk(dependencyChunk);

            var dataChunk = new VltDataChunk(ExportManager.GetExports());

            cw.WriteChunk(dataChunk);

            var exportChunk = new VltExportChunk(dataChunk.ExportEntries);

            cw.WriteChunk(exportChunk);
            var binWriter = new BinaryWriter(BinStream);

            foreach (var pointerObject in ExportManager.GetExports().OfType <IPointerObject>())
            {
                pointerObject.WritePointerData(Vault, binWriter);
            }

            // after writing exports, we can build pointers
            BuildPointers();

            var pointersChunk = new VltPointersChunk();

            cw.WriteChunk(pointersChunk);
            var endChunk = new EndChunk();

            cw.WriteChunk(endChunk);

            return(ms);
        }
コード例 #3
0
ファイル: ChunkReader.cs プロジェクト: funk-yourself/VaultLib
        public ChunkBase NextChunk(Vault vault)
        {
            var header = new ChunkBlockHeader();

            header.Read(vault, Reader);
            ChunkBase chunk = null;

            switch (header.ID)
            {
            case 0x53747245:
                chunk = new BinStringsChunk();
                break;

            case 0x5374724E:
                chunk = new VltStartChunk();
                break;

            case 0x456E6443:
                chunk = new EndChunk();
                break;

            case 0x56657273:
                chunk = new VltVersionChunk();
                break;

            case 0x4465704E:
                chunk = new VltDependencyChunk();
                break;

            case 0x4578704E:
                chunk = new VltExportChunk();
                break;

            case 0x5074724E:
                chunk = new VltPointersChunk();
                break;

            default:
                chunk = new GenericChunk(header.ID);
                break;
            }

            chunk.Offset = header.Offset;
            chunk.Size   = header.Size + 8;

            return(chunk);
        }