Tested first run
This commit is contained in:
@ -1,6 +1,5 @@
|
||||
using System.Drawing;
|
||||
using System.Drawing.Imaging;
|
||||
using System.Globalization;
|
||||
using System.Reflection;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
@ -164,12 +163,16 @@ public class C_Resize
|
||||
}
|
||||
}
|
||||
|
||||
private byte[] SaveResizedSubfile3(string subFile, int[] resize, byte[] bytes, Shared.Models.FileHolder? fileHolder)
|
||||
private byte[] SaveResizedSubfile3(Shared.Models.Item item, int[] resize, bool returnAndDoNotWrite, byte[] bytes)
|
||||
{
|
||||
if (item.ImageFileHolder is null)
|
||||
throw new NullReferenceException(nameof(item.ImageFileHolder));
|
||||
if (item.ResizedFileHolder is null)
|
||||
throw new NullReferenceException(nameof(item.ResizedFileHolder));
|
||||
byte[] results;
|
||||
Bitmap bitmap;
|
||||
int outputResolutionWidth = resize[_OutputResolutionWidthIndex];
|
||||
using Bitmap temp = new(subFile, useIcm: false);
|
||||
using Bitmap temp = new(item.ImageFileHolder.FullName, useIcm: false);
|
||||
int outputResolutionHeight = resize[_OutputResolutionHeightIndex];
|
||||
PropertyItem[] propertyItems = temp.PropertyItems;
|
||||
int outputResolutionOrientation = resize[_OutputResolutionOrientationIndex];
|
||||
@ -204,23 +207,27 @@ public class C_Resize
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (fileHolder is null)
|
||||
if (returnAndDoNotWrite)
|
||||
results = GetBitmapData(bitmap);
|
||||
else
|
||||
{
|
||||
results = Array.Empty<byte>();
|
||||
CopyPropertyItems(bytes, propertyItems, bitmap);
|
||||
bitmap.Save(fileHolder.FullName, _ImageCodecInfo, _EncoderParameters);
|
||||
bitmap.Save(item.ResizedFileHolder.FullName, _ImageCodecInfo, _EncoderParameters);
|
||||
}
|
||||
bitmap.Dispose();
|
||||
return results;
|
||||
}
|
||||
|
||||
private byte[] SaveResizedSubfile5(string subFile, int[] resize, byte[] bytes, Shared.Models.FileHolder? fileHolder)
|
||||
private byte[] SaveResizedSubfile5(Shared.Models.Item item, int[] resize, bool returnAndDoNotWrite, byte[] bytes)
|
||||
{
|
||||
if (item.ImageFileHolder is null)
|
||||
throw new NullReferenceException(nameof(item.ImageFileHolder));
|
||||
if (item.ResizedFileHolder is null)
|
||||
throw new NullReferenceException(nameof(item.ResizedFileHolder));
|
||||
byte[] results;
|
||||
Bitmap bitmap;
|
||||
using Bitmap temp = new(subFile, useIcm: false);
|
||||
using Bitmap temp = new(item.ImageFileHolder.FullName, useIcm: false);
|
||||
PropertyItem[] propertyItems = temp.PropertyItems;
|
||||
int tempResolutionWidth = resize[_TempResolutionWidth];
|
||||
int tempResolutionHeight = resize[_TempResolutionHeight];
|
||||
@ -268,13 +275,13 @@ public class C_Resize
|
||||
{
|
||||
using (Graphics graphics = Graphics.FromImage(preRotated))
|
||||
graphics.DrawImage(bitmap, new Rectangle(0, 0, outputResolutionWidth, outputResolutionHeight), rectangle, GraphicsUnit.Pixel);
|
||||
if (fileHolder is null)
|
||||
if (returnAndDoNotWrite)
|
||||
results = GetBitmapData(bitmap);
|
||||
else
|
||||
{
|
||||
results = Array.Empty<byte>();
|
||||
CopyPropertyItems(bytes, propertyItems, bitmap);
|
||||
bitmap.Save(fileHolder.FullName, _ImageCodecInfo, _EncoderParameters);
|
||||
bitmap.Save(item.ResizedFileHolder.FullName, _ImageCodecInfo, _EncoderParameters);
|
||||
}
|
||||
}
|
||||
bitmap.Dispose();
|
||||
@ -283,54 +290,37 @@ public class C_Resize
|
||||
|
||||
#pragma warning restore CA1416
|
||||
|
||||
private byte[] SaveResizedSubfile(string subFile, Shared.Models.Property property, int[] resize, Shared.Models.FileHolder? fileHolder)
|
||||
private byte[] SaveResizedSubfile(Shared.Models.Item item, int[] resize, bool returnAndDoNotWrite)
|
||||
{
|
||||
if (item.Property is null)
|
||||
throw new NullReferenceException(nameof(item.Property));
|
||||
byte[] results;
|
||||
// string subFile, Shared.Models.Property property, Shared.Models.FileHolder? fileHolder
|
||||
string dateTimeFormat = Shared.Models.Stateless.Methods.IProperty.DateTimeFormat();
|
||||
DateTime dateTime = Shared.Models.Stateless.Methods.IProperty.GetMinimumDateTime(property);
|
||||
DateTime dateTime = Shared.Models.Stateless.Methods.IProperty.GetMinimumDateTime(item.Property);
|
||||
string dateTimeValue = dateTime.ToString(dateTimeFormat);
|
||||
byte[] bytes = _ASCIIEncoding.GetBytes(dateTimeValue);
|
||||
if (_ASCIIEncoding.GetString(bytes, 0, bytes.Length) != dateTimeValue)
|
||||
throw new Exception();
|
||||
if (resize.Length == 3)
|
||||
results = SaveResizedSubfile3(subFile, resize, bytes, fileHolder);
|
||||
results = SaveResizedSubfile3(item, resize, returnAndDoNotWrite, bytes);
|
||||
else if (resize.Length == 5)
|
||||
results = SaveResizedSubfile5(subFile, resize, bytes, fileHolder);
|
||||
results = SaveResizedSubfile5(item, resize, returnAndDoNotWrite, bytes);
|
||||
else
|
||||
throw new Exception();
|
||||
if (fileHolder is not null && false)
|
||||
{
|
||||
#pragma warning disable CA1416
|
||||
using Image image = Image.FromFile(fileHolder.FullName);
|
||||
if (image.PropertyIdList.Contains((int)IExif.Tags.DateTimeDigitized))
|
||||
{
|
||||
string value;
|
||||
DateTime checkDateTime;
|
||||
PropertyItem? propertyItem = image.GetPropertyItem((int)IExif.Tags.DateTimeDigitized);
|
||||
if (propertyItem?.Value is not null)
|
||||
{
|
||||
value = _ASCIIEncoding.GetString(propertyItem.Value, 0, propertyItem.Len - 1);
|
||||
if (value.Length == dateTimeFormat.Length && DateTime.TryParseExact(value, dateTimeFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out checkDateTime))
|
||||
_ = checkDateTime;
|
||||
}
|
||||
}
|
||||
#pragma warning restore CA1416
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
public byte[] GetResizedBytes(string outputResolution, string cResultsFullGroupDirectory, List<Tuple<string, DateTime>> subFileTuples, Shared.Models.Item item, Shared.Models.Property property, Dictionary<string, int[]> imageResizes)
|
||||
public byte[] GetResizedBytes(string outputResolution, string cResultsFullGroupDirectory, List<Tuple<string, DateTime>> subFileTuples, Shared.Models.Item item, Dictionary<string, int[]> imageResizes)
|
||||
{
|
||||
byte[] results;
|
||||
if (item.ImageFileHolder is null)
|
||||
throw new NullReferenceException(nameof(item.ImageFileHolder));
|
||||
if (!imageResizes.ContainsKey(outputResolution))
|
||||
throw new Exception();
|
||||
int[] resize = imageResizes[outputResolution];
|
||||
int outputResolutionWidth = resize[_OutputResolutionWidthIndex];
|
||||
int outputResolutionHeight = resize[_OutputResolutionHeightIndex];
|
||||
int outputResolutionOrientation = resize[_OutputResolutionOrientationIndex];
|
||||
results = SaveResizedSubfile(item.ImageFileHolder.FullName, property, resize, fileHolder: null);
|
||||
results = SaveResizedSubfile(item, resize, returnAndDoNotWrite: true);
|
||||
subFileTuples.Add(new Tuple<string, DateTime>(nameof(C_Resize), DateTime.Now));
|
||||
return results;
|
||||
}
|
||||
@ -343,19 +333,19 @@ public class C_Resize
|
||||
throw new NullReferenceException(nameof(item.ImageFileHolder));
|
||||
if (item.ResizedFileHolder is null)
|
||||
throw new NullReferenceException(nameof(item.ResizedFileHolder));
|
||||
Shared.Models.FileHolder fileHolder = item.ResizedFileHolder;
|
||||
if (!imageResizes.ContainsKey(outputResolution))
|
||||
throw new Exception();
|
||||
if (!fileHolder.Exists)
|
||||
FileInfo fileInfo = new(item.ResizedFileHolder.FullName);
|
||||
if (!fileInfo.Exists)
|
||||
{
|
||||
FileInfo fileInfo = new(fileHolder.FullName);
|
||||
if (fileInfo.Directory?.Parent is null)
|
||||
throw new Exception();
|
||||
string parentCheck = Path.Combine(fileInfo.Directory.Parent.FullName, fileInfo.Name);
|
||||
if (File.Exists(parentCheck))
|
||||
{
|
||||
File.Move(parentCheck, fileInfo.FullName);
|
||||
item.SetResizedFileHolder(_FilenameExtension, Shared.Models.Stateless.Methods.IFileHolder.Refresh(fileHolder));
|
||||
item.SetResizedFileHolder(_FilenameExtension, Shared.Models.Stateless.Methods.IFileHolder.Refresh(item.ResizedFileHolder));
|
||||
fileInfo.Refresh();
|
||||
}
|
||||
}
|
||||
int[] resize = imageResizes[outputResolution];
|
||||
@ -365,9 +355,10 @@ public class C_Resize
|
||||
int[] originalCollection = imageResizes[original];
|
||||
if (outputResolutionWidth == originalCollection[_OutputResolutionWidthIndex] && outputResolutionHeight == originalCollection[_OutputResolutionHeightIndex] && outputResolutionOrientation == originalCollection[_OutputResolutionOrientationIndex])
|
||||
{
|
||||
if (!fileHolder.Exists)
|
||||
if (!fileInfo.Exists)
|
||||
{
|
||||
File.Copy(item.ImageFileHolder.FullName, fileHolder.FullName);
|
||||
File.Copy(item.ImageFileHolder.FullName, fileInfo.FullName);
|
||||
item.SetResizedFileHolder(_FilenameExtension, Shared.Models.Stateless.Methods.IFileHolder.Refresh(item.ResizedFileHolder));
|
||||
subFileTuples.Add(new Tuple<string, DateTime>(nameof(C_Resize), DateTime.Now));
|
||||
}
|
||||
}
|
||||
@ -378,13 +369,14 @@ public class C_Resize
|
||||
List<DateTime> dateTimes = (from l in subFileTuples where changesFrom.Contains(l.Item1) select l.Item2).ToList();
|
||||
if (_OverrideForResizeImages)
|
||||
check = true;
|
||||
else if (!fileHolder.Exists)
|
||||
else if (!fileInfo.Exists)
|
||||
check = true;
|
||||
else if (dateTimes.Any() && dateTimes.Max() > fileHolder.LastWriteTime)
|
||||
else if (dateTimes.Any() && dateTimes.Max() > fileInfo.LastWriteTime)
|
||||
check = true;
|
||||
if (check)
|
||||
{
|
||||
_ = SaveResizedSubfile(item.ImageFileHolder.FullName, item.Property, resize, fileHolder);
|
||||
_ = SaveResizedSubfile(item, resize, returnAndDoNotWrite: false);
|
||||
item.SetResizedFileHolder(_FilenameExtension, Shared.Models.Stateless.Methods.IFileHolder.Refresh(item.ResizedFileHolder));
|
||||
subFileTuples.Add(new Tuple<string, DateTime>(nameof(C_Resize), DateTime.Now));
|
||||
}
|
||||
}
|
||||
@ -551,6 +543,8 @@ public class C_Resize
|
||||
}
|
||||
}
|
||||
}
|
||||
Shared.Models.FileHolder fileHolder = new(Path.Combine(AngleBracketCollection[0].Replace("<>", "()"), Path.GetFileName(item.ImageFileHolder.FullName)));
|
||||
item.SetResizedFileHolder(_FilenameExtension, fileHolder);
|
||||
return results;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user