public void PixelsShouldBeRedOrGreenOrBlue()
        {
            BitmapSource bitmapImage;

            PixelFormat pf          = PixelFormats.Bgra32;
            int         imageWidth  = 200;
            int         imageHeight = 200;
            int         rawStride   = (imageWidth * pf.BitsPerPixel + 7) / 8;

            byte[] rawImage = new byte[rawStride * imageHeight];

            Random rnd = new Random();

            rnd.NextBytes(rawImage);

            bitmapImage = BitmapSource.Create(imageWidth, imageHeight, 96, 96, pf, null, rawImage, rawStride);

            ImageProcessingLibrary.ImageProcessing proc = new ImageProcessingLibrary.ImageProcessing();
            bitmapImage = proc.ToMainColors(bitmapImage);

            int             width           = bitmapImage.PixelWidth;
            int             height          = bitmapImage.PixelHeight;
            WriteableBitmap writeableBitmap = new WriteableBitmap(bitmapImage);
            int             stride          = width * ((writeableBitmap.Format.BitsPerPixel + 7) / 8);
            int             arraySize       = height * stride;

            byte[] pixels = new byte[arraySize];
            writeableBitmap.CopyPixels(pixels, stride, 0);

            int j = 0;

            for (int i = 0; i < pixels.Length / 4; ++i)
            {
                int red   = pixels[j];
                int green = pixels[j + 1];
                int blue  = pixels[j + 2];

                Assert.IsTrue((red == 0 || red == 255));
                Assert.IsTrue((green == 0 || green == 255));
                Assert.IsTrue((blue == 0 || blue == 255));

                j += 4;
            }
        }
示例#2
0
        public void ChangeColors(ApplicationViewModel vm)
        {
            try
            {
                if (vm.ImageIsLoaded)
                {
                    ImageProcessingLibrary.ImageProcessing processing = new ImageProcessingLibrary.ImageProcessing();
                    BitmapSource image = processing.ToMainColors(vm.ImageSource);
                    vm.ImageSource = image;

                    vm.Message = $"Success! It took {processing.SecondsElapsedForChangeColors} seconds to change to the main colors";
                }
            }
            catch (Exception ex)
            {
                vm.Message = "An unexpected error has occurred";
                log.Error(ex);
                throw;
            }
        }
示例#3
0
        public void SaveImage(ApplicationViewModel vm)
        {
            try
            {
                SaveFileDialog saveFileDialog = new SaveFileDialog();
                saveFileDialog.Filter = "JPG|*.jpg|PNG|*.png|BMP|*.bmp";
                bool?result = saveFileDialog.ShowDialog();

                if (result.GetValueOrDefault())
                {
                    ImageProcessingLibrary.ImageProcessing processing = new ImageProcessingLibrary.ImageProcessing();
                    processing.SaveImage(vm.ImageSource, saveFileDialog.FileName, saveFileDialog.FilterIndex);
                    vm.Message = "Saved";
                }
            }
            catch (Exception ex)
            {
                log.Error(ex);
                vm.Message = "An unexpected error has occurred";
                throw;
            }
        }
示例#4
0
        public void LoadImage(ApplicationViewModel vm)
        {
            try
            {
                OpenFileDialog openFileDialog = new OpenFileDialog();
                openFileDialog.Filter = "JPG|*.jpg|PNG|*.png|BMP|*.bmp";
                bool?result = openFileDialog.ShowDialog();

                if (result.GetValueOrDefault())
                {
                    ImageProcessingLibrary.ImageProcessing processing = new ImageProcessingLibrary.ImageProcessing();
                    vm.ImageSource = processing.LoadImage(openFileDialog.FileName);
                    vm.Message     = "Loaded";
                }
            }
            catch (Exception ex)
            {
                log.Error(ex);
                vm.Message = "An unexpected error has occurred";
                throw;
            }
        }