public void TestStripColorManagement() { //Create an image with lots of colours using (var bitmap = new Bitmap(100, 100)) { using (var graphics = Graphics.FromImage(bitmap)) { graphics.Clear(Color.Yellow); using (var brush = new LinearGradientBrush(new Rectangle(0, 0, 25, 25), Color.Red, Color.Blue, LinearGradientMode.ForwardDiagonal)) { graphics.FillRectangle(brush, new Rectangle(0, 0, 50, 50)); } using (var brush = new LinearGradientBrush(new Rectangle(0, 0, 25, 25), Color.Blue, Color.Green, LinearGradientMode.ForwardDiagonal)) { graphics.FillRectangle(brush, new Rectangle(0, 50, 50, 50)); } using (var brush = new LinearGradientBrush(new Rectangle(0, 0, 25, 25), Color.Red, Color.Green, LinearGradientMode.ForwardDiagonal)) { graphics.FillRectangle(brush, new Rectangle(50, 0, 50, 50)); } using (var brush = new LinearGradientBrush(new Rectangle(0, 0, 25, 25), Color.Cyan, Color.Purple, LinearGradientMode.ForwardDiagonal)) { graphics.FillRectangle(brush, new Rectangle(50, 50, 50, 50)); } } using (var memStream = new MemoryStream()) { //Save to png bitmap.Save(memStream, ImageFormat.Png); //bitmap.Save(@"c:\stewart\temp\testbitmap.png"); var chunkInfo = PngEncoder.GetChunkInfo(memStream); var totalLength = chunkInfo.Sum(c => c.TotalLength) + 8; //8 for header //Parsed chunk info must match exact length of stream Assert.AreEqual(memStream.Length, totalLength); //Has some color management stuff by default Assert.IsTrue(0 < chunkInfo.Count(c => c.IsColorManagement)); using (var strippedStream = new MemoryStream()) { PngEncoder.StripColorManagement(memStream, strippedStream); chunkInfo = PngEncoder.GetChunkInfo(strippedStream); totalLength = chunkInfo.Sum(c => c.TotalLength) + 8; //8 for header //Parsed chunk info must match exact length of stream Assert.AreEqual(strippedStream.Length, totalLength); //Has no color management stuff left Assert.AreEqual(0, chunkInfo.Count(c => c.IsColorManagement)); strippedStream.Position = 0; using (var strippedBitmap = new Bitmap(strippedStream)) { for (int x = 0; x < 100; x++) { for (int y = 0; y < 100; y++) { var pixel1 = strippedBitmap.GetPixel(x, y); var pixel2 = bitmap.GetPixel(x, y); Assert.AreEqual(pixel1, pixel2); } } } } } } }