Ejemplo n.º 1
0
		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;
			}
		}
Ejemplo n.º 2
0
		//------------------------------   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;
			}
		}
Ejemplo n.º 3
0
		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);
				}
			}
		}