예제 #1
0
        /// <summary>
        /// Serialization
        /// </summary>
        /// <param name="info">Serialization info</param>
        /// <param name="context">Serialization context</param>
        /// <param name="id">Unique id for case when face is deserialized from a source file
        /// in the range [0 numFaces]. VAlue is -1 when face is deserialized by facedetection in a photo</param>
        /// <param name="serializeID">Unique serialization ID</param>
        /// <param name="serializeOffset">Unique offset. Used when more than 1 face comes from the same source photo</param>
        public void GetObjectData(SerializationInfo info, StreamingContext context, int id, int serializeID, int serializeOffset)
        {
            if (id >= 0)
            {
                info.AddValue("FaceID" + id.ToString(), MyID);
                serializeID = MyID;
            }

            info.AddValue("_FacePathName" + serializeID.ToString() + "_" + serializeOffset.ToString(), _pathName);
            info.AddValue("_FacePhotoID" + serializeID.ToString() + "_" + serializeOffset.ToString(), _photoID);
            // This would be the first guess serialization
            //info.AddValue("_FaceParentID" + serializeID.ToString() + "_" + serializeOffset.ToString(), _parentID);
            // However when face is deserialized it is by default made a child of the mainCanvas
            info.AddValue("_FaceParentID" + serializeID.ToString() + "_" + serializeOffset.ToString(), 0);
            info.AddValue("_FaceParentGroupID" + serializeID.ToString() + "_" + serializeOffset.ToString(), _parentGroupID);
            info.AddValue("_FaceParentPhotoID" + serializeID.ToString() + "_" + serializeOffset.ToString(), _parentPhotoID);
            info.AddValue("FaceLeft" + serializeID.ToString() + "_" + serializeOffset.ToString(), Canvas.GetLeft(this));
            info.AddValue("FaceTop" + serializeID.ToString() + "_" + serializeOffset.ToString(), Canvas.GetTop(this));

            // Distance Vectors
            info.AddValue("DistanceCount" + MyID.ToString(), DistanceVector.Count);
            int iOther = 0;

            foreach (KeyValuePair <Face, double> keyValue in DistanceVector)
            {
                Face otherFace = keyValue.Key;
                info.AddValue("DistanceID" + MyID.ToString() + "_" + iOther.ToString(), otherFace.MyID.ToString());
                info.AddValue("Distance" + MyID.ToString() + "_" + iOther.ToString(), keyValue.Value);
                ++iOther;
            }
        }
예제 #2
0
        /// <summary>
        /// Deserialize the face
        /// </summary>
        /// <param name="info">Serialization info</param>
        /// <param name="context">Serialization context</param>
        /// <param name="deserializeID">Unique Id for the source</param>
        /// <param name="deserializeOffSet">Unique offset. Used when more than 1 face comes from the same source photo</param>
        public void Deserialize(SerializationInfo info, StreamingContext context, int deserializeID, int deserializeOffSet)
        {
            _pathName = info.GetString("_FacePathName" + deserializeID.ToString() + "_" + deserializeOffSet.ToString());
            _photoID  = info.GetInt32("_FacePhotoID" + deserializeID.ToString() + "_" + deserializeOffSet.ToString());
            if (null == _parent)
            {
                _parentID = info.GetInt32("_FaceParentID" + deserializeID.ToString() + "_" + deserializeOffSet.ToString());
            }
            else
            {
                _parentID = ((IDisplayableElement)_parent).MyID;
            }
            _parentGroupID = info.GetInt32("_FaceParentGroupID" + deserializeID.ToString() + "_" + deserializeOffSet.ToString());
            _parentPhotoID = info.GetInt32("_FaceParentPhotoID" + deserializeID.ToString() + "_" + deserializeOffSet.ToString());
            Canvas.SetLeft(this, info.GetDouble("FaceLeft" + deserializeID.ToString() + "_" + deserializeOffSet.ToString()));
            Canvas.SetTop(this, info.GetDouble("FaceTop" + deserializeID.ToString() + "_" + deserializeOffSet.ToString()));


            //Distances - need to temporarily desirialze into ID, value
            int distanceCount = info.GetInt32("DistanceCount" + MyID.ToString());

            _deserializeDistance = new Dictionary <int, double>();

            for (int iOther = 0; iOther < distanceCount; ++iOther)
            {
                int    otherID = info.GetInt32("DistanceID" + MyID.ToString() + "_" + iOther.ToString());
                double dist    = info.GetDouble("Distance" + MyID.ToString() + "_" + iOther.ToString());
                _deserializeDistance.Add(otherID, dist);
            }
        }
예제 #3
0
 /// <summary>
 /// Serialization
 /// </summary>
 /// <param name="info">Serialization info</param>
 /// <param name="context">Serialization context</param>
 /// <param name="id">Unique identifier for this group. In range [0:numGroups]</param>
 public void GetObjectData(SerializationInfo info, StreamingContext context, int id)
 {
     info.AddValue("GroupID" + id.ToString(), MyID);
     info.AddValue("_GroupParentGroupID" + MyID.ToString(), _parentGroupID);
     info.AddValue("_GroupTagName" + MyID.ToString(), _tagTextBox.Text);
     info.AddValue("GroupLeft" + MyID.ToString(), Canvas.GetLeft(this));
     info.AddValue("GroupTop" + MyID.ToString(), Canvas.GetTop(this));
     info.AddValue("GroupDisplayState" + MyID.ToString(), (int)DisplayMode);
 }
예제 #4
0
        /// <summary>
        /// Deserialization constructor for a group
        /// </summary>
        /// <param name="info">Serialization info</param>
        /// <param name="context">Serialization context</param>
        /// <param name="mainCanvas">Main canvas</param>
        /// <param name="id">Unique id identifying group</param>
        public Group(SerializationInfo info, StreamingContext context, BackgroundCanvas mainCanvas, int id)
        {
            _ID = info.GetInt32("GroupID" + id.ToString());
            Initialize(mainCanvas);

            _parentGroupID   = info.GetInt32("_GroupParentGroupID" + MyID.ToString());
            _tagTextBox.Text = info.GetString("_GroupTagName" + MyID.ToString());
            Canvas.SetLeft(this, info.GetDouble("GroupLeft" + MyID.ToString()));
            Canvas.SetTop(this, info.GetDouble("GroupTop" + MyID.ToString()));
            DisplayMode = (DisplayState)info.GetInt32("GroupDisplayState" + MyID.ToString());
        }