Subversion Repositories Projects

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2484 - 1
using System.Drawing;
2
using System.Drawing.Imaging;
3
using System.IO;
4
using System.Runtime.Serialization;
5
 
6
namespace Touchless.Vision.Contracts
7
{
8
    [DataContract]
9
    public class Frame
10
    {
11
        [DataMember]
12
        public int Id { get; set; }
13
 
14
        [IgnoreDataMember]
15
        public Bitmap OriginalImage { get; set; }
16
 
17
        private Bitmap _image;
18
        [IgnoreDataMember]
19
        public Bitmap Image
20
        {
21
            get
22
            {
23
                if (_image == null)
24
                {
25
                    _image = new Bitmap( OriginalImage );
26
                }
27
 
28
                return _image;
29
            }
30
            set { _image = value;}
31
        }
32
 
33
        public Frame(Bitmap originalImage)
34
        {
35
            Id = NextId();
36
            OriginalImage = new Bitmap( originalImage );
37
        }
38
 
39
        [DataMember]
40
        public byte[] ImageData
41
        {
42
            get
43
            {
44
                byte[] data = null;
45
 
46
                if (Image != null)
47
                   using( MemoryStream memoryStream = new MemoryStream() )
48
                   {
49
                      Image.Save( memoryStream, ImageFormat.Png );
50
                      memoryStream.Flush();
51
                      data = memoryStream.ToArray();
52
                   }
53
 
54
                return data;
55
            }
56
            //Setter is only here for serialization purposes
57
            set { }
58
        }
59
 
60
 
61
        private static readonly object SyncObject = new object();
62
        private static int _nextId = 1;
63
        private static int NextId()
64
        {
65
            int result;
66
            lock (SyncObject)
67
            {
68
                result = _nextId;
69
                _nextId++;
70
            }
71
 
72
            return result;
73
        }
74
    }
75
}