public void TestSetNewImage() { var imageSetter = new ImageSetterManipulator(); var originalImage = imageSetter.ManipulatedImage; var newImage = new CodedImage { Size = new Size(5, 5) }; int[] newPixels, manipulatedPixels; using (newImage.LockPixels(out newPixels)) { for (int i = 0; i < newPixels.Length; i++) { newPixels[i] = i; } } imageSetter.SetNewImage(newImage); Assert.AreSame(originalImage, imageSetter.SourceImage, "Source image still should be same original object."); Assert.AreSame(originalImage, imageSetter.ManipulatedImage, "Manipulated image still should be same original object."); Assert.AreEqual(newImage.Size, imageSetter.ManipulatedImage.Size); using (newImage.LockPixels(out newPixels)) using (imageSetter.ManipulatedImage.LockPixels(out manipulatedPixels)) { Assert.AreEqual(newPixels.Length, manipulatedPixels.Length); for (int i = 0; i < newPixels.Length; i++) { Assert.AreEqual(newPixels[i], manipulatedPixels[i], string.Format("Pixels in position {0} should be same", i)); } } }
public void TestSetNewImage() { var controller = new ImageSetterController(new ImageSetterManipulator()); var newImage = new CodedImage { Size = new Size(5, 5) }; int[] newPixels, manipulatedPixels; using (newImage.LockPixels(out newPixels)) { for (int i = 0; i < newPixels.Length; i++) { newPixels[i] = i; } } controller.SetNewImage(newImage); Assert.AreEqual(newImage.Size, controller.Manipulator.ManipulatedImage.Size); using (newImage.LockPixels(out newPixels)) using (controller.Manipulator.ManipulatedImage.LockPixels(out manipulatedPixels)) { Assert.AreEqual(newPixels.Length, manipulatedPixels.Length); for (int i = 0; i < newPixels.Length; i++) { Assert.AreEqual(newPixels[i], manipulatedPixels[i], string.Format("Pixels in position {0} should be same", i)); } } }
public void TestCropRect() { var srcImage = new CodedImage { Size = new Size(5, 5) }; int[] pixels; using (srcImage.LockPixels(out pixels)) { for (int i = 0; i < pixels.Length; i++) { pixels[i] = i; } } var cropper = new ImageCropManipulator(srcImage); cropper.CropRect(new Rectangle(2, 1, 2, 3)); var dstImage = cropper.ManipulatedImage; Assert.AreEqual(new Size(2, 3), dstImage.Size); using (dstImage.LockPixels(out pixels)) { Assert.AreEqual(6, pixels.Length); Assert.AreEqual(7, pixels[0]); Assert.AreEqual(8, pixels[1]); Assert.AreEqual(12, pixels[2]); Assert.AreEqual(13, pixels[3]); Assert.AreEqual(17, pixels[4]); Assert.AreEqual(18, pixels[5]); } }
public void TestFlipHorizontally() { var srcImage = new CodedImage { Size = new Size(3, 2) }; int[] pixels; using (srcImage.LockPixels(out pixels)) { for (int i = 0; i < pixels.Length; i++) { pixels[i] = i; } } var rotator = new ImageRotateManipulator(srcImage); rotator.FlipHorizontally(); var dstImage = rotator.ManipulatedImage; Assert.AreEqual(new Size(3, 2), dstImage.Size); using (dstImage.LockPixels(out pixels)) { Assert.AreEqual(2, pixels[0]); Assert.AreEqual(1, pixels[1]); Assert.AreEqual(0, pixels[2]); Assert.AreEqual(5, pixels[3]); Assert.AreEqual(4, pixels[4]); Assert.AreEqual(3, pixels[5]); } }
public void TestCropArt() { var srcImage = new CodedImage { Size = new Size(10, 10) }; int[] pixels; using (srcImage.LockPixels(out pixels)) { for (int i = 0; i < pixels.Length; i++) { pixels[i] = 100; } } var cropper = new ImageCropManipulator(srcImage); cropper.CropArc(new Rectangle(1, 1, 8, 8)); var dstImage = cropper.ManipulatedImage; dstImage.CompletePalette(); Assert.AreEqual(new Size(8, 8), dstImage.Size); Assert.AreEqual(new CodedColor(255, 255, 255), dstImage[0, 0]); Assert.AreEqual(new CodedColor(255, 255, 255), dstImage[0, 7]); Assert.AreEqual(new CodedColor(255, 255, 255), dstImage[7, 0]); Assert.AreEqual(new CodedColor(255, 255, 255), dstImage[7, 7]); Assert.AreEqual(new CodedColor(100), dstImage[4, 4], "Some point in the centre"); }
public void TestShift() { var sourceImage = new CodedImage { Size = new Size(200, 150) }; int[] sourcePixels; using (sourceImage.LockPixels(out sourcePixels)) { for (int i = 0; i < sourcePixels.Length; i++) { sourcePixels[i] = i; } } var visualZoomController = new VisualZoomController(sourceImage, new Size(60, 50)); visualZoomController.ZoomPercent = 100; visualZoomController.OnTouched(new Point(20, 20)); visualZoomController.OnShift(new Point(40, 30)); Assert.AreEqual(new Rectangle(0, 0, 60, 50), visualZoomController.VisualImageFrame, "Frame should not be moved beyond left-top edges."); visualZoomController.OnShift(new Point(30, 25)); Assert.AreEqual(new Rectangle(10, 5, 60, 50), visualZoomController.VisualImageFrame, "Frame should be shifted on distance (10, 5)."); AssertVisualImageFrameForZoom100(visualZoomController.VisualImage, visualZoomController.VisualImageFrame, sourceImage.Size); visualZoomController.OnShift(new Point(-200, -150)); Assert.AreEqual(new Rectangle(140, 100, 60, 50), visualZoomController.VisualImageFrame, "Frame should not be moved beyond right-bottom edges."); AssertVisualImageFrameForZoom100(visualZoomController.VisualImage, visualZoomController.VisualImageFrame, sourceImage.Size); }
public void SetNewImage(CodedImage newImage) { ManipulatedImage.Size = newImage.Size; int[] sourcePixels, manipulatedPixels; using (newImage.LockPixels(out sourcePixels)) using (ManipulatedImage.LockPixels(out manipulatedPixels)) { sourcePixels.CopyTo(manipulatedPixels, 0); } ManipulatedImage.SourceImageFileName = newImage.SourceImageFileName; OnImageChanged(); }
static string PixelsToString(CodedImage image) { int[] pixels; using (image.LockPixels(out pixels)) { StringBuilder sb = new StringBuilder(pixels.Length * 8); for (int i = 0; i < pixels.Length; i++) { sb.Append(pixels[i].ToString("X8")); } return(sb.ToString()); } }
CodedImage CreateSourceImage() { var sourceImage = new CodedImage { Size = new Size(200, 150) }; int[] sourcePixels; using (sourceImage.LockPixels(out sourcePixels)) { for (int i = 0; i < sourcePixels.Length; i++) { sourcePixels[i] = i; } } return(sourceImage); }
public void TestCallManipulations() { var srcImage = new CodedImage { Size = new Size(10, 10) }; int[] pixels; using (srcImage.LockPixels(out pixels)) { for (int i = 0; i < pixels.Length; i++) { pixels[i] = i; } } var cropper = new ImageCropController(new ImageCropManipulator(srcImage)); cropper.CropKind = ImageCropper.CropKind.Rectangle; cropper.CropRect = new Rectangle(1, 2, 8, 6); var dstImage = cropper.Manipulator.ManipulatedImage; Assert.AreEqual(new Size(8, 6), dstImage.Size); using (dstImage.LockPixels(out pixels)) { Assert.AreEqual(cropper.CropRect.Width * cropper.CropRect.Height, pixels.Length); var i = 0; for (int y = cropper.CropRect.Top; y < cropper.CropRect.Top + cropper.CropRect.Height; y++) { for (int x = cropper.CropRect.Left; x < cropper.CropRect.Left + cropper.CropRect.Width; x++) { Assert.AreEqual(y * srcImage.Size.Width + x, pixels[i], string.Format("Pixels in position {0} should be same.", i)); i++; } } } cropper.CropKind = ImageCropper.CropKind.Arc; dstImage.CompletePalette(); Assert.AreEqual(new Size(8, 6), dstImage.Size); Assert.AreEqual(new CodedColor(255, 255, 255), dstImage[0, 0]); Assert.AreEqual(new CodedColor(255, 255, 255), dstImage[0, 5]); Assert.AreEqual(new CodedColor(255, 255, 255), dstImage[7, 0]); Assert.AreEqual(new CodedColor(255, 255, 255), dstImage[7, 5]); Assert.AreNotEqual(new CodedColor(255, 255, 255), dstImage[4, 3], "Some point in the centre"); }
void AssertVisualImageFrameForZoom100(CodedImage visualImage, Rectangle visualImageFrame, Size sourceImageSize) { int[] visualPixels; using (visualImage.LockPixels(out visualPixels)) { for (int y = visualImageFrame.Top; y < visualImageFrame.BottomExclusive; y++) { for (int x = visualImageFrame.Left; x < visualImageFrame.RightExclusive; x++) { var sourceIndex = y * sourceImageSize.Width + x; var visualIndex = (y - visualImageFrame.Top) * visualImageFrame.Width + (x - visualImageFrame.Left); Assert.AreEqual(sourceIndex, visualPixels[visualIndex]); } } } }
protected override CodedImage LoadImageCore(string fileName) { var size = TestSize.Width > 0 && TestSize.Height > 0 ? TestSize : new Size(1, 1); var image = new CodedImage { Size = size }; int[] pixels; using (image.LockPixels(out pixels)) { for (var i = 0; i < pixels.Length; i++) { pixels[i] = TestColor; } } return(image); }
public void TestUpdateVisualImageCore() { var sourceImage = new CodedImage { Size = new Size(80, 60) }; int[] sourcePixels; using (sourceImage.LockPixels(out sourcePixels)) { for (int i = 0; i < sourcePixels.Length; i++) { sourcePixels[i] = 0x00FF7700; } } var cropController = new ImageCropController(new ImageCropManipulator(sourceImage)); var visualZoomedCropController = new VisualZoomCropController(cropController, sourceImage.Size); // To keep simple without points translation Assert.AreEqual(100, visualZoomedCropController.ZoomPercent, "Precondition."); using (visualZoomedCropController.SuspendUpdateVisualImage()) { visualZoomedCropController.CropKind = ImageCropper.CropKind.Rectangle; visualZoomedCropController.SetCropRectForTest(new Rectangle(10, 10, 55, 35)); visualZoomedCropController.UpdateVisualImage(); } AssertVisualColor(visualZoomedCropController, 0x00FF7700, "Should be source color.", new Point(30, 20), new Point(40, 30)); AssertVisualColor(visualZoomedCropController, 0x00FF7700.HalfToneLow(), "Should be darkened color on sizers.", new Point(10, 10), new Point(35, 10), new Point(65, 10), new Point(10, 25), new Point(65, 10), new Point(10, 45), new Point(35, 45), new Point(65, 45)); AssertVisualColor(visualZoomedCropController, 0x00FF7700.ThreeQuarterToneHigh(), "Should be faded color outside crop region.", new Point(0, 0), new Point(70, 50)); AssertVisualColor(visualZoomedCropController, 0x00FF7700, "Should be source color in corner of rectangle.", new Point(16, 10), new Point(10, 16)); using (visualZoomedCropController.SuspendUpdateVisualImage()) { visualZoomedCropController.CropKind = ImageCropper.CropKind.Arc; visualZoomedCropController.UpdateVisualImage(); } AssertVisualColor(visualZoomedCropController, 0x00FF7700, "Should be source color.", new Point(30, 20), new Point(40, 30)); AssertVisualColor(visualZoomedCropController, 0x00FF7700.HalfToneLow(), "Should be darkened color on sizers.", new Point(10, 10), new Point(35, 10), new Point(65, 10), new Point(10, 25), new Point(65, 25), new Point(10, 45), new Point(35, 45), new Point(65, 45)); AssertVisualColor(visualZoomedCropController, 0x00FF7700.ThreeQuarterToneHigh(), "Should be faded color outside crop region.", new Point(0, 0), new Point(70, 50)); AssertVisualColor(visualZoomedCropController, 0x00FF7700.ThreeQuarterToneHigh(), "Should be faded color in corner of arc.", new Point(16, 10), new Point(10, 16)); }
public override void TestRestoreManipulationsCore() { var srcImage = new CodedImage { Size = new Size(3, 2) }; srcImage.CompletePalette(); Assert.AreEqual(1, srcImage.Palette.Count, "Precondition - there should be one color for #00000000."); var symboler = new ImageSymbolsManipulator(srcImage); Assert.AreSame(symboler.SourceImage, symboler.ManipulatedImage); var font = SAEResources.GetAllFonts().First(); symboler.ApplySymbols(new[] { 'x' }, font); Assert.AreEqual('x', srcImage.Palette.First <CodedColor>().SymbolChar); int[] pixels; using (srcImage.LockPixels(out pixels)) { for (int i = 0; i < pixels.Length; i++) { pixels[i] = 0x00ffffff; } } srcImage.CompletePalette(); srcImage.Palette.SymbolsFont = "abc"; Assert.AreEqual(1, srcImage.Palette.Count, "There should be one color for #00ffffff."); Assert.AreEqual(' ', srcImage.Palette.First <CodedColor>().SymbolChar, "Space should be default symbol for new colors."); Assert.AreNotEqual(font.Name, srcImage.Palette.SymbolsFont); symboler.RestoreManipulations(); Assert.AreEqual('x', srcImage.Palette.First <CodedColor>().SymbolChar); Assert.AreEqual(font.Name, srcImage.Palette.SymbolsFont); }
public void TestApplySymbols() { var srcImage = new CodedImage { Size = new Size(3, 2) }; int[] pixels; using (srcImage.LockPixels(out pixels)) { for (int i = 0; i < pixels.Length; i++) { pixels[i] = i % 3; } } srcImage.CompletePalette(); Assert.AreEqual(3, srcImage.Palette.Count, "Precondition - there should be 3 colors."); var symboler = new ImageSymbolsManipulator(srcImage); Assert.AreSame(symboler.SourceImage, symboler.ManipulatedImage); var font = SAEResources.GetAllFonts().First(); symboler.ApplySymbols(new[] { ' ', '.', 'X' }, font); Assert.AreEqual(font.Name, srcImage.Palette.SymbolsFont); var colors = srcImage.Palette.OrderByDarknes(true).Cast <CodedColor>().ToArray(); Assert.AreEqual(3, colors.Length); Assert.AreEqual(2, colors[0].Argb); Assert.AreEqual(' ', colors[0].SymbolChar); Assert.AreEqual(1, colors[1].Argb); Assert.AreEqual('.', colors[1].SymbolChar); Assert.AreEqual(0, colors[2].Argb); Assert.AreEqual('X', colors[2].SymbolChar); }