/// <summary> /// Saves the given Frame into a stream /// </summary> /// <param name="frame">The frame to write to the stream</param> /// <param name="stream">The stream to write the frame to</param> protected void SaveFrameToStream(IFrame frame, Stream stream) { BinaryWriter writer = new BinaryWriter(stream); var castFrame = frame as Frame; if (castFrame != null) { SaveLayersToStream(castFrame, stream); } else { using (Bitmap bitmap = frame.GetComposedBitmap()) { PersistenceHelper.SaveImageToStream(bitmap, stream); } } // Write the frame ID writer.Write(frame.ID); // Write the hash now writer.Write(frame.Hash.Length); writer.Write(frame.Hash, 0, frame.Hash.Length); }
public void TestImagePersistence() { // Setup the test Bitmap bitmap1 = FrameGenerator.GenerateRandomBitmap(48, 37, 0); Bitmap bitmap2 = FrameGenerator.GenerateRandomBitmap(12, 45, 0); Stream stream = new MemoryStream(); // Test the methods PersistenceHelper.SaveImageToStream(bitmap1, stream); PersistenceHelper.SaveImageToStream(bitmap2, stream); // Reset stream stream.Position = 0; // Load the bitmaps back up again one at a time Bitmap loadedBitmap1 = PersistenceHelper.LoadImageFromStream(stream); Bitmap loadedBitmap2 = PersistenceHelper.LoadImageFromStream(stream); // Compare images Assert.IsTrue(ImageUtilities.ImagesAreIdentical(bitmap1, loadedBitmap1), "An image loaded from a stream must match completely the image that was saved"); Assert.IsTrue(ImageUtilities.ImagesAreIdentical(bitmap2, loadedBitmap2), "An image loaded from a stream must match completely the image that was saved"); // Try to edit the loaded bitmaps to verify editability loadedBitmap1.SetPixel(0, 0, Color.Black); loadedBitmap2.SetPixel(0, 0, Color.Black); }
/// <summary> /// Saves the contents of a layer to a stream /// </summary> /// <param name="layer">The layer to save</param> /// <param name="stream">The stream to save the layer to</param> private void SaveLayerToStream(IFrameLayer layer, Stream stream) { // Save the layer's name BinaryWriter writer = new BinaryWriter(stream, Encoding.UTF8); writer.Write(layer.Name); PersistenceHelper.SaveImageToStream(layer.LayerBitmap, stream); }