/// <summary> /// Processes the image. /// </summary> /// <param name="factory"> /// The current instance of the <see cref="T:ImageProcessor.ImageFactory"/> class containing /// the image to process. /// </param> /// <returns> /// The processed image from the current instance of the <see cref="T:ImageProcessor.ImageFactory"/> class. /// </returns> public Image ProcessImage(ImageFactory factory) { Bitmap newImage = null; Image image = factory.Image; try { Tuple <int, bool> parameters = this.DynamicParameter; int degrees = parameters.Item1; bool rotate = parameters.Item2; int width = image.Width; int height = image.Height; newImage = new Bitmap(image); using (FastBitmap fastBitmap = new FastBitmap(newImage)) { if (!rotate) { for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { HslaColor original = HslaColor.FromColor(fastBitmap.GetPixel(x, y)); HslaColor altered = HslaColor.FromHslaColor(degrees / 360f, original.S, original.L, original.A); fastBitmap.SetPixel(x, y, altered); } } } else { for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { HslaColor original = HslaColor.FromColor(fastBitmap.GetPixel(x, y)); HslaColor altered = HslaColor.FromHslaColor((original.H + (degrees / 360f)) % 1, original.S, original.L, original.A); fastBitmap.SetPixel(x, y, altered); } } } } image.Dispose(); image = newImage; } catch (Exception ex) { if (newImage != null) { newImage.Dispose(); } throw new ImageProcessingException("Error processing image with " + this.GetType().Name, ex); } return(image); }
/// <summary> /// Processes the image. /// </summary> /// <param name="factory"> /// The current instance of the <see cref="T:ImageProcessor.ImageFactory"/> class containing /// the image to process. /// </param> /// <returns> /// The processed image from the current instance of the <see cref="T:ImageProcessor.ImageFactory"/> class. /// </returns> public Image ProcessImage(ImageFactory factory) { var image = factory.Image; try { Tuple <int, bool> parameters = DynamicParameter; var degrees = parameters.Item1; if (degrees == 0) { return(image); } var rotate = parameters.Item2; var width = image.Width; var height = image.Height; using (var fastBitmap = new FastBitmap(image)) { if (!rotate) { for (var y = 0; y < height; y++) { for (var x = 0; x < width; x++) { var original = HslaColor.FromColor(fastBitmap.GetPixel(x, y)); var altered = HslaColor.FromHslaColor(degrees / 360f, original.S, original.L, original.A); fastBitmap.SetPixel(x, y, altered); } } } else { for (var y = 0; y < height; y++) { for (var x = 0; x < width; x++) { var original = HslaColor.FromColor(fastBitmap.GetPixel(x, y)); var altered = HslaColor.FromHslaColor((original.H + (degrees / 360f)) % 1, original.S, original.L, original.A); fastBitmap.SetPixel(x, y, altered); } } } } return(image); } catch (Exception ex) { throw new ImageProcessingException("Error processing image with " + GetType().Name, ex); } }
public void then_should_return_cmyk_version_of_hsla_color_given_red() { // Arrange var hslaColor = HslaColor.FromHslaColor(0f, 1f, .5f, 1f); // Act var cmyk = (CmykColor)hslaColor; // Assert Assert.That(cmyk.C, Is.EqualTo(0)); Assert.That(cmyk.M, Is.EqualTo(100)); Assert.That(cmyk.Y, Is.EqualTo(100)); Assert.That(cmyk.K, Is.EqualTo(0)); }
public void BasicExchangeEngineTest() { // Various H colors. var c0 = HslaColor.FromHslaColor(0.0f, 0.5f, 0.5f); var c1 = HslaColor.FromHslaColor(0.1f, 0.5f, 0.5f); var c3 = HslaColor.FromHslaColor(0.3f, 0.5f, 0.5f); var c4 = HslaColor.FromHslaColor(0.4f, 0.5f, 0.5f); var c5 = HslaColor.FromHslaColor(0.5f, 0.5f, 0.5f); var c9 = HslaColor.FromHslaColor(0.9f, 0.5f, 0.5f); var cA = HslaColor.FromHslaColor(1.0f, 0.5f, 0.5f); // Fudged S or L var c1a = HslaColor.FromHslaColor(0.1f, 0.4f, 0.5f); var c1b = HslaColor.FromHslaColor(0.1f, 0.5f, 0.4f); var c1c = HslaColor.FromHslaColor(0.1f, 0.6f, 0.5f); var c1d = HslaColor.FromHslaColor(0.1f, 0.5f, 0.6f); // Argument order irrelevant Assert.AreEqual(ColorDistances.SimpleHue(c1, c3), ColorDistances.SimpleHue(c3, c1), 0.00001); Assert.AreEqual(ColorDistances.SimpleHue(c1, c4), ColorDistances.SimpleHue(c4, c1), 0.00001); // Color is always 0.0 away from itself. Assert.AreEqual(0.0f, ColorDistances.SimpleHue(c1, c1), 0.00001); Assert.AreEqual(0.0f, ColorDistances.SimpleHue(c4, c4), 0.00001); Assert.AreEqual(0.0f, ColorDistances.SimpleHue(c9, c9), 0.00001); // Distance same if wrapping around 1.0/0.0. Assert.AreEqual(ColorDistances.SimpleHue(c9, c1), ColorDistances.SimpleHue(c1, c3), 0.00001); // Max distance (1.0) at 180 from each other. Assert.AreEqual(1.0f, ColorDistances.SimpleHue(c4, c9), 0.00001); Assert.AreEqual(1.0f, ColorDistances.SimpleHue(c9, c4), 0.00001); Assert.AreEqual(1.0f, ColorDistances.SimpleHue(c5, c0), 0.00001); Assert.AreEqual(1.0f, ColorDistances.SimpleHue(c5, cA), 0.00001); Assert.AreEqual(1.0f, ColorDistances.SimpleHue(c0, c5), 0.00001); Assert.AreEqual(1.0f, ColorDistances.SimpleHue(cA, c5), 0.00001); var c25 = HslaColor.FromHslaColor(0.25f, 0.5f, 0.5f); var c75 = HslaColor.FromHslaColor(0.75f, 0.5f, 0.5f); Assert.AreEqual(1.0f, ColorDistances.SimpleHue(c25, c75), 0.00001); Assert.AreEqual(1.0f, ColorDistances.SimpleHue(c75, c25), 0.00001); }