/// <summary> /// Creates a new project /// </summary> /// <param name="type">The type of the project</param> public static void NewProject(ProjectType type) { Close(); HasInit = false; UsedProgram = type; switch (type) { case ProjectType.LapseStudio: CurrentProject = new ProjectLS(); break; case ProjectType.CameraRaw: CurrentProject = new ProjectACR(); break; case ProjectType.RawTherapee: CurrentProject = new ProjectRT(); break; } CurrentProject.ProgressChanged += OnProgressChanged; CurrentProject.FramesLoaded += OnFramesLoaded; CurrentProject.BrightnessCalculated += OnBrightnessCalculated; CurrentProject.WorkDone += OnWorkDone; }
internal static XMP[] Do(ProjectACR CurProj) { XMP[] Output = new XMP[CurProj.Frames.Count]; XMP typexmp = ((FrameACR)CurProj.Frames.First(t => t.IsKeyframe)).XMPFile; for (int j = 0; j < CurProj.Frames.Count; j++) { Output[j] = typexmp.Copy(); } for (int i = 0; i < typexmp.Values.Count; i++) { List<KeyValuePair<int, object>> Values = new List<KeyValuePair<int, object>>(); Type CurType = typexmp.Values.ElementAt(i).Value.type; string valname = typexmp.Values.ElementAt(i).Key; for (int j = 0; j < CurProj.Frames.Count; j++) { if (CurProj.Frames[j].IsKeyframe) { Values.Add(new KeyValuePair<int, object>(j, ((FrameACR)CurProj.Frames[j]).XMPFile.Values[valname].Value)); } else if (j == 0) { Values.Add(new KeyValuePair<int, object>(j, ((FrameACR)CurProj.Frames.First(t => t.IsKeyframe)).XMPFile.Values[valname].Value)); } else if (j == CurProj.Frames.Count - 1) { Values.Add(new KeyValuePair<int, object>(j, ((FrameACR)CurProj.Frames.Last(t => t.IsKeyframe)).XMPFile.Values[valname].Value)); } } if (CurType != typeof(bool) && CurType != typeof(string)) { PointD[] InVals = new PointD[Values.Count]; PointD[] OutVals = new PointD[CurProj.Frames.Count]; if (CurType == typeof(int)) { for (int k = 0; k < Values.Count; k++) { InVals[k] = new PointD(Values[k].Key, (int)Convert.ChangeType(Values[k].Value, typeof(int))); } OutVals = Do(InVals, CurProj.Frames.Count); for (int k = 0; k < CurProj.Frames.Count; k++) { if (((FrameACR)CurProj.Frames[k]).XMPFile != null) { Output[k].Path = ((FrameACR)CurProj.Frames[k]).XMPFile.Path; Output[k].Exposure = ((FrameACR)CurProj.Frames[k]).XMPFile.Exposure; Output[k].FileVersion = ((FrameACR)CurProj.Frames[k]).XMPFile.FileVersion; Output[k].NewExposure = ((FrameACR)CurProj.Frames[k]).XMPFile.NewExposure; } Output[k].Values[valname] = new XMP.XMPentry(typexmp.Values[valname].Name, (int)OutVals[k].Y, typeof(int), typexmp.Values[valname].sign, typexmp.Values[valname].min, typexmp.Values[valname].max); } } else if (CurType == typeof(double)) { for (int k = 0; k < Values.Count; k++) { InVals[k] = new PointD(Values[k].Key, (float)Convert.ChangeType(Values[k].Value, typeof(float))); } OutVals = Do(InVals, CurProj.Frames.Count); for (int k = 0; k < CurProj.Frames.Count; k++) { if (((FrameACR)CurProj.Frames[k]).XMPFile != null) { Output[k].Path = ((FrameACR)CurProj.Frames[k]).XMPFile.Path; Output[k].Exposure = ((FrameACR)CurProj.Frames[k]).XMPFile.Exposure; Output[k].FileVersion = ((FrameACR)CurProj.Frames[k]).XMPFile.FileVersion; Output[k].NewExposure = ((FrameACR)CurProj.Frames[k]).XMPFile.NewExposure; } Output[k].Values[valname] = new XMP.XMPentry(typexmp.Values[valname].Name, OutVals[k].Y, typeof(double), typexmp.Values[valname].sign, typexmp.Values[valname].min, typexmp.Values[valname].max); } } else { throw new InterpolationNotPossibleException("Couldn't interpolate this kind of Value: " + CurType.FullName); } } else { int index = 0; for (int k = 0; k < CurProj.Frames.Count; k++) { if (((FrameACR)CurProj.Frames[k]).XMPFile != null) { Output[k].Path = ((FrameACR)CurProj.Frames[k]).XMPFile.Path; Output[k].Exposure = ((FrameACR)CurProj.Frames[k]).XMPFile.Exposure; Output[k].FileVersion = ((FrameACR)CurProj.Frames[k]).XMPFile.FileVersion; Output[k].NewExposure = ((FrameACR)CurProj.Frames[k]).XMPFile.NewExposure; } Output[k].Values[valname] = new XMP.XMPentry(typexmp.Values[valname].Name, Values[index].Value, CurType, typexmp.Values[valname].sign, typexmp.Values[valname].min, typexmp.Values[valname].max); if (Values[index].Key == k) { index++; } } } } return Output; }
internal static XMP[] Do(ProjectACR CurProj) { XMP[] Output = new XMP[CurProj.Frames.Count]; XMP typexmp = ((FrameACR)CurProj.Frames.First(t => t.IsKeyframe)).XMPFile; for (int j = 0; j < CurProj.Frames.Count; j++) { Output[j] = typexmp.Copy(); } for (int i = 0; i < typexmp.Values.Count; i++) { List <KeyValuePair <int, object> > Values = new List <KeyValuePair <int, object> >(); Type CurType = typexmp.Values.ElementAt(i).Value.type; string valname = typexmp.Values.ElementAt(i).Key; for (int j = 0; j < CurProj.Frames.Count; j++) { if (CurProj.Frames[j].IsKeyframe) { Values.Add(new KeyValuePair <int, object>(j, ((FrameACR)CurProj.Frames[j]).XMPFile.Values[valname].Value)); } else if (j == 0) { Values.Add(new KeyValuePair <int, object>(j, ((FrameACR)CurProj.Frames.First(t => t.IsKeyframe)).XMPFile.Values[valname].Value)); } else if (j == CurProj.Frames.Count - 1) { Values.Add(new KeyValuePair <int, object>(j, ((FrameACR)CurProj.Frames.Last(t => t.IsKeyframe)).XMPFile.Values[valname].Value)); } } if (CurType != typeof(bool) && CurType != typeof(string)) { PointD[] InVals = new PointD[Values.Count]; PointD[] OutVals = new PointD[CurProj.Frames.Count]; if (CurType == typeof(int)) { for (int k = 0; k < Values.Count; k++) { InVals[k] = new PointD(Values[k].Key, (int)Convert.ChangeType(Values[k].Value, typeof(int))); } OutVals = Do(InVals, CurProj.Frames.Count); for (int k = 0; k < CurProj.Frames.Count; k++) { if (((FrameACR)CurProj.Frames[k]).XMPFile != null) { Output[k].Path = ((FrameACR)CurProj.Frames[k]).XMPFile.Path; Output[k].Exposure = ((FrameACR)CurProj.Frames[k]).XMPFile.Exposure; Output[k].FileVersion = ((FrameACR)CurProj.Frames[k]).XMPFile.FileVersion; Output[k].NewExposure = ((FrameACR)CurProj.Frames[k]).XMPFile.NewExposure; } Output[k].Values[valname] = new XMP.XMPentry(typexmp.Values[valname].Name, (int)OutVals[k].Y, typeof(int), typexmp.Values[valname].sign, typexmp.Values[valname].min, typexmp.Values[valname].max); } } else if (CurType == typeof(double)) { for (int k = 0; k < Values.Count; k++) { InVals[k] = new PointD(Values[k].Key, (float)Convert.ChangeType(Values[k].Value, typeof(float))); } OutVals = Do(InVals, CurProj.Frames.Count); for (int k = 0; k < CurProj.Frames.Count; k++) { if (((FrameACR)CurProj.Frames[k]).XMPFile != null) { Output[k].Path = ((FrameACR)CurProj.Frames[k]).XMPFile.Path; Output[k].Exposure = ((FrameACR)CurProj.Frames[k]).XMPFile.Exposure; Output[k].FileVersion = ((FrameACR)CurProj.Frames[k]).XMPFile.FileVersion; Output[k].NewExposure = ((FrameACR)CurProj.Frames[k]).XMPFile.NewExposure; } Output[k].Values[valname] = new XMP.XMPentry(typexmp.Values[valname].Name, OutVals[k].Y, typeof(double), typexmp.Values[valname].sign, typexmp.Values[valname].min, typexmp.Values[valname].max); } } else { throw new InterpolationNotPossibleException("Couldn't interpolate this kind of Value: " + CurType.FullName); } } else { int index = 0; for (int k = 0; k < CurProj.Frames.Count; k++) { if (((FrameACR)CurProj.Frames[k]).XMPFile != null) { Output[k].Path = ((FrameACR)CurProj.Frames[k]).XMPFile.Path; Output[k].Exposure = ((FrameACR)CurProj.Frames[k]).XMPFile.Exposure; Output[k].FileVersion = ((FrameACR)CurProj.Frames[k]).XMPFile.FileVersion; Output[k].NewExposure = ((FrameACR)CurProj.Frames[k]).XMPFile.NewExposure; } Output[k].Values[valname] = new XMP.XMPentry(typexmp.Values[valname].Name, Values[index].Value, CurType, typexmp.Values[valname].sign, typexmp.Values[valname].min, typexmp.Values[valname].max); if (Values[index].Key == k) { index++; } } } } return(Output); }