Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        /// <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);
        }