public bool SaveOri() { try { string mess1 = ""; if (_oriCurrent == -100){ mess1 = T._("This file has no Exif orientation."); MessageBox.Show(mess1, T._("Save not possible"), MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return false; } if (_oriCurrent == _oriInitial){ mess1 = T._("Orientation not changed"); MessageBox.Show(mess1, T._("Save not possible"), MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return false; } byte oriByte; switch(_oriCurrent) { case 1: oriByte = 6; // 90 l break; case 2: oriByte = 3; // 180 break; case 3: oriByte = 8; // 270 break; default: oriByte = 1; // 0 break; } ushort ori = 0; using (var reader = new ExifReader(_currentPath)) { if (reader.GetTagValue(ExifTags.Orientation, out ori)) { reader.SaveOrient(oriByte); } } // set original date after update DateTime dtOriginal = DateTime.MinValue; ExifRead.ExifODate(out dtOriginal, _currentPath); System.IO.File.SetLastWriteTime(_currentPath, dtOriginal); //Debug.WriteLine("Orient ini: {0}, current {1}, byte {2} ", _oriInitial, _oriCurrent, ori); return true; } catch (Exception e) { MessageBox.Show(T._("Error for update") + "\n" + e.Message, T._("Error"), MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return false; } }
//------------------------------ bar functions ---------------------------------------------------------- public void ScanImagesBar( ) { List<ImgFile> imList; _il.ImgListOut(out imList); DateTime dtOriginal = DateTime.MinValue; foreach (ImgFile imf in imList) { string picPath = imf.fName; DateTime dtCreation = File.GetCreationTime(picPath); DateTime dtChanged = File.GetLastWriteTime(picPath); DateTime dtFile; if (dtCreation < dtChanged){ dtFile = dtCreation; } else { dtFile = dtChanged; } imf.fDate = dtFile; ExifRead.ExifODate(out dtOriginal, picPath); imf.fDateOriginal = dtOriginal; } }
public void CalcBar( ) { List<ImgFile> imList; _il.ImgListOut(out imList); DateTime dtOriginal = DateTime.MinValue; DateTime nullDate = DateTime.MinValue; DateTime minDate = DateTime.MaxValue; DateTime maxDate = DateTime.MinValue; int fCount = 0; int fCountExif = -1; int dateCount = 0; DateTime priorDate = DateTime.MinValue; var spanDict = new Dictionary<int, int>(); _posList.Clear(); _priorList.Clear(); _rangeDict.Clear(); // dict for time gaps foreach (ImgFile imf in imList) { string picPath = imf.fName; dtOriginal = imf.fDateOriginal; fCount++; string fName = Path.GetFileName(picPath); int pPos = fName.IndexOf("+"); if (pPos > -1){ _posList.Add(fCount); } if (dtOriginal != nullDate){ //Debug.WriteLine("path: " + picPath + " " + dtOriginal.ToString()); fCountExif = fCount; dateCount++; imf.fDateOriginal = dtOriginal; if (priorDate > dtOriginal){ //Debug.WriteLine("prior date: " + fCount); _priorList.Add(fCount); } if (minDate > dtOriginal) minDate = dtOriginal; if (maxDate < dtOriginal) maxDate = dtOriginal; if (dateCount > 1){ TimeSpan span = dtOriginal.Subtract(priorDate); int spanSec = Math.Abs((int) span.TotalSeconds); spanDict.Add(fCount, spanSec); } priorDate = dtOriginal; } else { // no exif date if (fCountExif == fCount - 1){ // gap to exif date spanDict.Add(fCount, Int32.MaxValue); } } } // span values if (dateCount > 0){ TimeSpan imgSpan = maxDate.Subtract(minDate); //Debug.WriteLine("min: " + minDate.ToString() + " max: " + maxDate.ToString()); //Debug.WriteLine("range: " + imgSpan.ToString()); int mean = (int) imgSpan.TotalSeconds / dateCount; long sumVar = 0; foreach (KeyValuePair<int, int> sd in spanDict) { if (sd.Value != Int32.MaxValue){ long var = (long) Math.Pow((mean - sd.Value), 2); sumVar += var; //Debug.WriteLine("F Num: " + dfn.Key + " " + dfn.Value); } } int stdDev = (int) Math.Sqrt(sumVar / dateCount); //Debug.WriteLine("mean / std: {0}/{1}", mean, stdDev); int breakVal = mean + stdDev * 2; //int wi = 2; if (imgSpan.TotalDays > 730){ _rangeType = 1; // years } else if (imgSpan.TotalDays > 60){ _rangeType = 2; // months } else if (imgSpan.TotalDays > 1){ _rangeType = 3; // days } else { _rangeType = 4; // hours } int i = 0; // largest breaks string p0Path = ""; if (_il.DirPathPos(ref p0Path, 1)){ ExifRead.ExifODate(out _r0Date, p0Path); } foreach (KeyValuePair<int, int> sd in spanDict.OrderByDescending(key=> key.Value)) { i++; //Debug.WriteLine("pic no / dist: {0}/{1}", sd.Key, sd.Value); if (sd.Value < breakVal) break; string piPath = ""; DateTime dOriginal = nullDate; if (_il.DirPathPos(ref piPath, sd.Key)){ ExifRead.ExifODate(out dOriginal, piPath); } _rangeDict.Add(sd.Key, dOriginal); } } }