Subversion Repositories Projects

Rev

Blame | Last modification | View Log | RSS feed

using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Runtime.Serialization;

namespace Touchless.Vision.Contracts
{
    [DataContract]
    public class Frame
    {
        [DataMember]
        public int Id { get; set; }

        [IgnoreDataMember]
        public Bitmap OriginalImage { get; set; }

        private Bitmap _image;
        [IgnoreDataMember]
        public Bitmap Image
        {
            get
            {
                if (_image == null)
                {
                    _image = new Bitmap( OriginalImage );
                }

                return _image;
            }
            set { _image = value;}
        }

        public Frame(Bitmap originalImage)
        {
            Id = NextId();
            OriginalImage = new Bitmap( originalImage );
        }

        [DataMember]
        public byte[] ImageData
        {
            get
            {
                byte[] data = null;

                if (Image != null)
                   using( MemoryStream memoryStream = new MemoryStream() )
                   {
                      Image.Save( memoryStream, ImageFormat.Png );
                      memoryStream.Flush();
                      data = memoryStream.ToArray();
                   }

                return data;
            }
            //Setter is only here for serialization purposes
            set { }
        }


        private static readonly object SyncObject = new object();
        private static int _nextId = 1;
        private static int NextId()
        {
            int result;
            lock (SyncObject)
            {
                result = _nextId;
                _nextId++;
            }

            return result;
        }
    }
}