_Original

This commit is contained in:
2022-12-31 13:10:03 -07:00
parent 4b6811644c
commit 45f4401fa4
13 changed files with 197 additions and 141 deletions

View File

@ -14,7 +14,7 @@ namespace View_by_Distance.Resize.Models;
/// <summary>
// Dictionary<string, int[]>
/// </summary>
public class C_Resize
public class C_Resize : Shared.Models.Methods.IResize
{
public List<string> AngleBracketCollection { get; }
@ -22,6 +22,7 @@ public class C_Resize
protected readonly string _FileNameExtension;
public string FileNameExtension => _FileNameExtension;
private readonly string _Original;
private readonly int _TempResolutionWidth;
private readonly int _TempResolutionHeight;
private readonly string[] _ValidResolutions;
@ -39,6 +40,7 @@ public class C_Resize
public C_Resize(bool forceResizeLastWriteTimeToCreationTime, bool overrideForResizeImages, bool propertiesChangedForResize, string[] validResolutions, ImageCodecInfo imageCodecInfo, EncoderParameters encoderParameters, string filenameExtension)
{
_Original = "Original";
_TempResolutionWidth = 3;
_TempResolutionHeight = 4;
_OutputResolutionWidthIndex = 0;
@ -175,9 +177,8 @@ public class C_Resize
}
}
private byte[] SaveResizedSubfile3(MappingFromItem mappingFromItem, int[] resize, bool returnAndDoNotWrite, byte[] bytes)
private void SaveResizedSubfile3(MappingFromItem mappingFromItem, int[] resize, byte[] bytes)
{
byte[] results;
Bitmap bitmap;
int outputResolutionWidth = resize[_OutputResolutionWidthIndex];
using Bitmap temp = new(mappingFromItem.ImageFileHolder.FullName, useIcm: false);
@ -215,21 +216,13 @@ public class C_Resize
default:
break;
}
if (returnAndDoNotWrite)
results = GetBitmapData(bitmap);
else
{
results = Array.Empty<byte>();
CopyPropertyItems(bytes, propertyItems, bitmap);
bitmap.Save(mappingFromItem.ResizedFileHolder.FullName, _ImageCodecInfo, _EncoderParameters);
}
CopyPropertyItems(bytes, propertyItems, bitmap);
bitmap.Save(mappingFromItem.ResizedFileHolder.FullName, _ImageCodecInfo, _EncoderParameters);
bitmap.Dispose();
return results;
}
private byte[] SaveResizedSubfile5(MappingFromItem mappingFromItem, int[] resize, bool returnAndDoNotWrite, byte[] bytes)
private void SaveResizedSubfile5(MappingFromItem mappingFromItem, int[] resize, byte[] bytes)
{
byte[] results;
Bitmap bitmap;
using Bitmap temp = new(mappingFromItem.ImageFileHolder.FullName, useIcm: false);
PropertyItem[] propertyItems = temp.PropertyItems;
@ -279,24 +272,16 @@ public class C_Resize
{
using (Graphics graphics = Graphics.FromImage(preRotated))
graphics.DrawImage(bitmap, new Rectangle(0, 0, outputResolutionWidth, outputResolutionHeight), rectangle, GraphicsUnit.Pixel);
if (returnAndDoNotWrite)
results = GetBitmapData(bitmap);
else
{
results = Array.Empty<byte>();
CopyPropertyItems(bytes, propertyItems, bitmap);
bitmap.Save(mappingFromItem.ResizedFileHolder.FullName, _ImageCodecInfo, _EncoderParameters);
}
CopyPropertyItems(bytes, propertyItems, bitmap);
bitmap.Save(mappingFromItem.ResizedFileHolder.FullName, _ImageCodecInfo, _EncoderParameters);
}
bitmap.Dispose();
return results;
}
#pragma warning restore CA1416
private byte[] SaveResizedSubfile(Shared.Models.Property property, MappingFromItem mappingFromItem, int[] resize, bool returnAndDoNotWrite)
private void SaveResizedSubfile(Shared.Models.Property property, MappingFromItem mappingFromItem, int[] resize)
{
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);
@ -305,43 +290,37 @@ public class C_Resize
if (_ASCIIEncoding.GetString(bytes, 0, bytes.Length) != dateTimeValue)
throw new Exception();
if (resize.Length == 3)
results = SaveResizedSubfile3(mappingFromItem, resize, returnAndDoNotWrite, bytes);
SaveResizedSubfile3(mappingFromItem, resize, bytes);
else if (resize.Length == 5)
results = SaveResizedSubfile5(mappingFromItem, resize, returnAndDoNotWrite, bytes);
SaveResizedSubfile5(mappingFromItem, resize, bytes);
else
throw new Exception();
return results;
}
public byte[] GetResizedBytes(string outputResolution, string cResultsFullGroupDirectory, List<Tuple<string, DateTime>> subFileTuples, Shared.Models.Property property, MappingFromItem mappingFromItem, Dictionary<string, int[]> imageResizeKeyValuePairs)
(int, int, int) Shared.Models.Methods.IResize.Get(string outputResolution, Dictionary<string, int[]> outputResolutionToResize)
{
byte[] results;
if (!imageResizeKeyValuePairs.ContainsKey(outputResolution))
throw new Exception();
int[] resize = imageResizeKeyValuePairs[outputResolution];
int outputResolutionWidth = resize[_OutputResolutionWidthIndex];
int outputResolutionHeight = resize[_OutputResolutionHeightIndex];
int outputResolutionOrientation = resize[_OutputResolutionOrientationIndex];
results = SaveResizedSubfile(property, mappingFromItem, resize, returnAndDoNotWrite: true);
subFileTuples.Add(new Tuple<string, DateTime>(nameof(C_Resize), DateTime.Now));
return results;
int[] outputResolutionCollection = outputResolutionToResize[outputResolution];
int outputResolutionWidth = outputResolutionCollection[0];
int outputResolutionHeight = outputResolutionCollection[1];
int outputResolutionOrientation = outputResolutionCollection[2];
return new(outputResolutionWidth, outputResolutionHeight, outputResolutionOrientation);
}
public void SaveResizedSubfile(Property.Models.Configuration configuration, string outputResolution, string cResultsFullGroupDirectory, List<Tuple<string, DateTime>> subFileTuples, Item item, Shared.Models.Property property, MappingFromItem mappingFromItem, string original, Dictionary<string, int[]> imageResizeKeyValuePairs)
public void SaveResizedSubfile(Property.Models.Configuration configuration, string outputResolution, string cResultsFullGroupDirectory, List<Tuple<string, DateTime>> subFileTuples, Item item, Shared.Models.Property property, MappingFromItem mappingFromItem, Dictionary<string, int[]> outputResolutionToResize)
{
if (mappingFromItem.ResizedFileHolder is null)
throw new NullReferenceException(nameof(mappingFromItem.ResizedFileHolder));
if (!imageResizeKeyValuePairs.ContainsKey(original))
if (!outputResolutionToResize.ContainsKey(_Original))
throw new Exception();
if (!imageResizeKeyValuePairs.ContainsKey(outputResolution))
if (!outputResolutionToResize.ContainsKey(outputResolution))
throw new Exception();
FileInfo fileInfo = new(mappingFromItem.ResizedFileHolder.FullName);
bool check = false;
int[] resize = imageResizeKeyValuePairs[outputResolution];
int[] resize = outputResolutionToResize[outputResolution];
int outputResolutionWidth = resize[_OutputResolutionWidthIndex];
int outputResolutionHeight = resize[_OutputResolutionHeightIndex];
int outputResolutionOrientation = resize[_OutputResolutionOrientationIndex];
int[] originalCollection = imageResizeKeyValuePairs[original];
int[] originalCollection = outputResolutionToResize[_Original];
string[] changesFrom = new string[] { nameof(Property.Models.A_Property), nameof(B_Metadata), nameof(C_Resize) };
List<DateTime> dateTimes = (from l in subFileTuples where changesFrom.Contains(l.Item1) select l.Item2).ToList();
if (_OverrideForResizeImages)
@ -367,7 +346,7 @@ public class C_Resize
check = true;
if (check)
{
_ = SaveResizedSubfile(property, mappingFromItem, resize, returnAndDoNotWrite: false);
SaveResizedSubfile(property, mappingFromItem, resize);
item.SetResizedFileHolder(_FileNameExtension, Shared.Models.Stateless.Methods.IFileHolder.Refresh(mappingFromItem.ResizedFileHolder));
subFileTuples.Add(new Tuple<string, DateTime>(nameof(C_Resize), DateTime.Now));
}
@ -395,7 +374,7 @@ public class C_Resize
return result;
}
private Dictionary<string, int[]> GetImageResizes(Shared.Models.Property property, List<KeyValuePair<string, string>> metadataCollection, string original)
private Dictionary<string, int[]> GetImageResizes(Shared.Models.Property property, List<KeyValuePair<string, string>> metadataCollection)
{
Dictionary<string, int[]> results = new();
int[] desired;
@ -412,12 +391,21 @@ public class C_Resize
orientation = GetOrientation(metadataCollection);
checkWidth = property.Width.Value;
checkHeight = property.Height.Value;
results.Add(original, new int[] { checkWidth, checkHeight, orientation });
if (!_ValidResolutions.Contains(_Original))
results.Add(_Original, new int[] { checkWidth, checkHeight, orientation });
foreach (string validResolution in _ValidResolutions)
{
desired = GetCollection(validResolution);
desiredWidth = desired[0];
desiredHeight = desired[1];
if (validResolution == _Original)
{
desiredWidth = checkWidth;
desiredHeight = checkHeight;
}
else
{
desired = GetCollection(validResolution);
desiredWidth = desired[0];
desiredHeight = desired[1];
}
if (checkWidth <= desiredWidth && checkHeight <= desiredHeight)
results.Add(validResolution, new int[] { checkWidth, checkHeight, orientation });
else
@ -447,9 +435,9 @@ public class C_Resize
return result;
}
public Dictionary<string, int[]> GetResizeKeyValuePairs(Property.Models.Configuration configuration, string cResultsFullGroupDirectory, List<Tuple<string, DateTime>> subFileTuples, List<string> parseExceptions, string original, List<KeyValuePair<string, string>> metadataCollection, Shared.Models.Property property, MappingFromItem mappingFromItem)
public Dictionary<string, int[]> GetResizeKeyValuePairs(Property.Models.Configuration configuration, string cResultsFullGroupDirectory, List<Tuple<string, DateTime>> subFileTuples, List<string> parseExceptions, List<KeyValuePair<string, string>> metadataCollection, Shared.Models.Property property, MappingFromItem mappingFromItem)
{
Dictionary<string, int[]> results;
Dictionary<string, int[]>? results;
string json;
string[] changesFrom = new string[] { nameof(Property.Models.A_Property), nameof(B_Metadata) };
List<DateTime> dateTimes = (from l in subFileTuples where changesFrom.Contains(l.Item1) select l.Item2).ToList();
@ -466,40 +454,32 @@ public class C_Resize
fileInfo.Refresh();
}
if (_PropertiesChangedForResize)
results = new();
results = null;
else if (!fileInfo.Exists)
results = new();
results = null;
else if (!fileInfo.FullName.EndsWith(".json") && !fileInfo.FullName.EndsWith(".old"))
throw new ArgumentException("must be a *.json file");
else if (dateTimes.Any() && dateTimes.Max() > fileInfo.LastWriteTime)
results = new();
results = null;
else
{
json = File.ReadAllText(fileInfo.FullName);
try
{
Dictionary<string, int[]>? keyValuePairs;
keyValuePairs = JsonSerializer.Deserialize<Dictionary<string, int[]>>(json);
if (keyValuePairs is null)
results = JsonSerializer.Deserialize<Dictionary<string, int[]>>(json);
if (results is null)
throw new Exception();
results = keyValuePairs;
if ((from l in results where l.Value[0] == l.Value[1] select true).Any())
{
results = GetImageResizes(property, metadataCollection, original);
if (!(from l in results where l.Value[0] == l.Value[1] select true).Any())
throw new Exception("Was square!");
}
subFileTuples.Add(new Tuple<string, DateTime>(nameof(C_Resize), fileInfo.LastWriteTime));
}
catch (Exception)
{
results = new();
results = null;
parseExceptions.Add(nameof(C_Resize));
}
}
if (results is null || !results.Any())
if (results is null)
{
results = GetImageResizes(property, metadataCollection, original);
results = GetImageResizes(property, metadataCollection);
json = JsonSerializer.Serialize(results, _WriteIndentedJsonSerializerOptions);
bool updateDateWhenMatches = dateTimes.Any() && fileInfo.Exists && dateTimes.Max() > fileInfo.LastWriteTime;
DateTime? dateTime = !updateDateWhenMatches ? null : dateTimes.Max();