diff --git a/src/ImageProcessor/Samplers/Resampler.cs b/src/ImageProcessor/Samplers/Resampler.cs
index c07c21f09..0f932b2af 100644
--- a/src/ImageProcessor/Samplers/Resampler.cs
+++ b/src/ImageProcessor/Samplers/Resampler.cs
@@ -17,12 +17,12 @@ namespace ImageProcessor.Samplers
///
/// The epsilon for comparing floating point numbers.
///
- private const float Epsilon = 0.0001f;
+ private const float Epsilon = 0.000001f;
///
/// The angle of rotation.
///
- private double angle = 45;
+ private double angle;
///
/// The horizontal weights.
@@ -95,10 +95,6 @@ namespace ImageProcessor.Samplers
Point centre = Rectangle.Center(sourceRectangle);
bool rotate = this.angle > 0 && this.angle < 360;
- int sourceBottom = sourceRectangle.Bottom;
- int maxY = sourceBottom - 1;
- int maxX = endX - 1;
-
Parallel.For(
startY,
endY,
@@ -135,8 +131,6 @@ namespace ImageProcessor.Samplers
int rotatedX = rotated.X;
int rotatedY = rotated.Y;
- // TODO: This can't work. We're not normalising properly since weights are skipped.
- // Also... This is so slow!
if (sourceRectangle.Contains(rotatedX, rotatedY))
{
sourceColor = Color.InverseCompand(source[rotatedX, rotatedY]);
@@ -161,10 +155,17 @@ namespace ImageProcessor.Samplers
}
}
- destination = Color.Compand(destination);
-
- // Ensure are alpha values only reflect possible values to prevent bleed.
- destination.A = (float)Math.Round(destination.A, 2);
+ // Restrict alpha values in an attempt to prevent bleed.
+ // This is a baaaaaaad hack!!!
+ if (destination.A <= 0.03)
+ {
+ destination = Color.Empty;
+ }
+ else
+ {
+ destination = Color.Compand(destination);
+ destination.A = (float)Math.Round(destination.A, 2);
+ }
target[x, y] = destination;
}
@@ -222,7 +223,7 @@ namespace ImageProcessor.Samplers
{
float w = sampler.GetValue((a - fu) / scale);
- if (Math.Abs(w) > Epsilon)
+ if (w < 0 || w > 0)
{
sum += w;
builder.Add(new Weight(a, w));