diff --git a/src/ImageSharp/Common/Helpers/EnumUtils.cs b/src/ImageSharp/Common/Helpers/EnumUtils.cs
index d6bead640..a59841162 100644
--- a/src/ImageSharp/Common/Helpers/EnumUtils.cs
+++ b/src/ImageSharp/Common/Helpers/EnumUtils.cs
@@ -19,15 +19,14 @@ namespace SixLabors.ImageSharp
/// The default value to return.
/// The .
public static TEnum Parse(int value, TEnum defaultValue)
- where TEnum : Enum
+ where TEnum : struct, Enum
{
- foreach (TEnum enumValue in Enum.GetValues(typeof(TEnum)))
+ DebugGuard.IsTrue(Unsafe.SizeOf() == sizeof(int), "Only int-sized enums are supported.");
+
+ TEnum valueEnum = Unsafe.As(ref value);
+ if (Enum.IsDefined(valueEnum))
{
- TEnum current = enumValue;
- if (value == Unsafe.As(ref current))
- {
- return enumValue;
- }
+ return valueEnum;
}
return defaultValue;
@@ -41,8 +40,10 @@ namespace SixLabors.ImageSharp
/// The flag.
/// The .
public static bool HasFlag(TEnum value, TEnum flag)
- where TEnum : Enum
+ where TEnum : struct, Enum
{
+ DebugGuard.IsTrue(Unsafe.SizeOf() == sizeof(int), "Only int-sized enums are supported.");
+
uint flagValue = Unsafe.As(ref flag);
return (Unsafe.As(ref value) & flagValue) == flagValue;
}
diff --git a/src/ImageSharp/Formats/Tiff/TiffEncoderCore.cs b/src/ImageSharp/Formats/Tiff/TiffEncoderCore.cs
index 27c449073..16071001d 100644
--- a/src/ImageSharp/Formats/Tiff/TiffEncoderCore.cs
+++ b/src/ImageSharp/Formats/Tiff/TiffEncoderCore.cs
@@ -417,6 +417,13 @@ namespace SixLabors.ImageSharp.Formats.Tiff
return;
case TiffPhotometricInterpretation.Rgb:
+ // Make sure 1 Bit compression is only used with 1 bit pixel type.
+ if (IsOneBitCompression(this.CompressionType))
+ {
+ // Invalid compression / bits per pixel combination, fallback to no compression.
+ compression = DefaultCompression;
+ }
+
this.SetEncoderOptions(TiffBitsPerPixel.Bit24, photometricInterpretation, compression, predictor);
return;
}