private void ProcessChunk(byte[] chunkBytes) { string chunkType = PngChunk.GetChunkTypeString(chunkBytes.Skip(4).Take(4).ToArray()); switch (chunkType) { case "IHDR": var headerChunk = new HeaderChunk(); headerChunk.Decode(chunkBytes); width = (int)headerChunk.Width; height = (int)headerChunk.Height; bitsPerSample = (int)headerChunk.BitDepth; colorType = headerChunk.ColorType; chunks.Add(headerChunk); break; case "PLTE": var paletteChunk = new PaletteChunk(); paletteChunk.Decode(chunkBytes); palette = paletteChunk.Palette; chunks.Add(paletteChunk); break; case "tRNS": var transparencyChunk = new TransparencyChunk(); transparencyChunk.Decode(chunkBytes); palette.AddAlphaToColors(transparencyChunk.PaletteTransparencies); break; case "IDAT": var dataChunk = new DataChunk(); dataChunk.Decode(chunkBytes); dataChunks.Add(dataChunk); break; default: break; } }