_Original
This commit is contained in:
@ -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();
|
||||
|
Reference in New Issue
Block a user