Exemple #1
0
        public static BitmapSource Brightness(BitmapSource source, Byte value)
        {
            AsmProxy proxy = new AsmProxy();
            int      size, stride;

            byte[] pixels = new BitmapWorker().GetByteArray(source, out size, out stride);
            unsafe
            {
                fixed(byte *array = pixels)
                {
                    proxy.executeAsmBrightnessFilter(array, size, value);
                }
            }
            BitmapSource result = BitmapSource.Create(source.PixelWidth, source.PixelHeight, source.DpiX, source.DpiY, source.Format, source.Palette, pixels, stride);

            return(result);
        }
Exemple #2
0
        private void ReplaceAlphaChannelAction()
        {
            var openDialog = new OpenFileDialog {
                Filter = this.GetSupportedExtensionsOpenDialogFilter()
            };
            var dialogResult = openDialog.ShowDialog();

            if (dialogResult.HasValue && dialogResult.Value)
            {
                var fileInfo = new FileInfo(openDialog.FileName);
                if (fileInfo.Exists)
                {
                    this.Bitmap = BitmapWorker.GetBitmapSourceWithReplacedAlphaChannel(
                        this.Bitmap, FileWorker.OpenImage(fileInfo));
                    this.OnPropertyChanged(nameof(this.Viewport));
                }
            }
        }
Exemple #3
0
        public void AffectImage(Dictionary <String, Object> args)
        {
            try
            {
                IEventAggregator aggregator;
                //ZoomingInfo zi;
                Image        image          = (Image)args["DisplayedImage"];
                BitmapSource bitmapSource   = image.OriginalBitmap;
                int          clickPositionX = (int)((int)args["ClickPositionX"] * bitmapSource.DpiX / 96.0);
                int          clickPositionY = (int)((int)args["ClickPositionY"] * bitmapSource.DpiY / 96.0);
                int          imageWidth     = bitmapSource.PixelWidth;
                int          imageHeight    = bitmapSource.PixelHeight;
                double       zoomValue      = (double)args["ZoomValue"];

                if (zoomValue >= 1)
                {
                }
                else
                {
                    zoomPositionXBeg = clickPositionX - (int)(0.5 * (zoomValue * imageWidth));
                    zoomPositionYBeg = clickPositionY - (int)(0.5 * (zoomValue * imageHeight));

                    zoomPositionXEnd = clickPositionX + (int)(0.5 * (zoomValue * imageWidth));
                    zoomPositionYEnd = clickPositionY + (int)(0.5 * (zoomValue * imageHeight));

                    AdjustZoomBordersIfNecessary(imageWidth, imageHeight);
                    int width  = zoomPositionXEnd - zoomPositionXBeg;
                    int height = zoomPositionYEnd - zoomPositionYBeg;

                    Bitmap       bitmap;
                    BitmapWorker bw = new BitmapWorker();
                    bitmap = GetBitmap(bitmapSource);
                    bitmap = bw.GetBitmapFragment(bitmap, zoomPositionXBeg, zoomPositionYBeg, width, height, 0, 0, zoomValue);

                    Bitmap finalBitmap = new Bitmap(bitmap, new System.Drawing.Size(imageWidth, imageHeight));
                    bitmapSource = bw.BitmapToSource(finalBitmap);
                    image.Bitmap = bitmapSource;
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
Exemple #4
0
        public void AffectImage(Dictionary <String, Object> args)
        {
            try
            {
                IEventAggregator     aggregator     = GlobalEvent.GetEventAggregator();
                BitmapWorker         bw             = new BitmapWorker();
                BitmapSource         bitmapSource   = (BitmapSource)args["BitmapSource"];
                System.Windows.Point regionLocation = (System.Windows.Point)args["RegionLocation"];
                int regionWidth  = (int)((int)args["RegionWidth"] * bitmapSource.DpiX / 96.0);
                int regionHeight = (int)((int)args["RegionHeight"] * bitmapSource.DpiY / 96.0);
                if (regionWidth <= 0 || regionHeight <= 0)
                {
                    return;
                }
                Thickness imagePosition = (Thickness)args["ImagePosition"];
                int       ID            = (int)args["PresenterID"];
                double    scale         = (double)args["Scale"];

                int imagePosX = (int)(imagePosition.Left * bitmapSource.DpiX / 96.0);
                int imagePosY = (int)(imagePosition.Top * bitmapSource.DpiY / 96.0);
                int posX      = (int)(regionLocation.X * bitmapSource.DpiX / 96.0);
                int posY      = (int)(regionLocation.Y * bitmapSource.DpiY / 96.0);
                if (regionWidth <= 0 || regionHeight <= 0)
                {
                    return;
                }

                Bitmap bitmap;
                bitmap = bw.GetBitmap(bitmapSource);
                bool isOutside  = false;
                bool isTooSmall = false;
                bitmap = bw.GetBitmapFragment(bitmap, posX, posY, regionWidth, regionHeight, imagePosX, imagePosY, scale, out isOutside, out isTooSmall);

                if (isTooSmall)
                {
                    MessageBox.Show("Witdth or height of a region is less than 1 pixel.", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                    aggregator.GetEvent <ResetRegionsEvent>().Publish();
                    return;
                }

                bitmap.Save(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\ImageViewer\temp" + ID.ToString() + ".png", ImageFormat.Png);
                bitmapSource = bw.BitmapToSource(bitmap);
                int stride;
                int size;
                stride = (bitmapSource.PixelWidth * bitmapSource.Format.BitsPerPixel + 7) / 8;
                size   = bitmapSource.PixelHeight * stride;
                byte[] pixels = new byte[size];
                bitmapSource.CopyPixels(pixels, stride, 0);

                List <byte> alphas = new List <byte>();
                List <byte> reds   = new List <byte>();
                List <byte> greens = new List <byte>();
                List <byte> blues  = new List <byte>();

                for (int i = 0; i < pixels.Length; i += 4)
                {
                    alphas.Add(pixels[i + 3]);
                    reds.Add(pixels[i + 2]);
                    greens.Add(pixels[i + 1]);
                    blues.Add(pixels[i]);
                }
                double[] averages = new double[4];
                averages[0] = 0;
                averages[1] = 0;
                averages[2] = 0;
                averages[3] = 0;
                for (int i = 0; i < alphas.Count; i++)
                {
                    averages[0] += reds[i];
                    averages[1] += greens[i];
                    averages[2] += blues[i];
                    averages[3] += alphas[i];
                }
                averages[0] /= reds.Count;
                averages[1] /= greens.Count;
                averages[2] /= blues.Count;
                averages[3] /= alphas.Count;

                byte[] mins = new byte[4];
                mins[0] = reds.Min();
                mins[1] = greens.Min();
                mins[2] = blues.Min();
                mins[3] = alphas.Min();

                byte[] maxs = new byte[4];
                maxs[0] = reds.Max();
                maxs[1] = greens.Max();
                maxs[2] = blues.Max();
                maxs[3] = alphas.Max();

                double[] variances  = new double[4];
                double[] deviations = new double[4];

                GetVarianceAndDeviation(ref variances, ref deviations, averages, reds, greens, blues, alphas);

                Dictionary <string, Object> regionInformation = new Dictionary <string, Object>();
                regionInformation.Add("Averages", averages);
                regionInformation.Add("Mins", mins);
                regionInformation.Add("Maxs", maxs);
                regionInformation.Add("Width", (int)(bitmap.Width));
                regionInformation.Add("Height", (int)(bitmap.Height));
                regionInformation.Add("Variances", variances);
                regionInformation.Add("Deviations", deviations);
                regionInformation.Add("PresenterID", ID);

                aggregator.GetEvent <SendRegionInformationEvent>().Publish(regionInformation);
            }
            catch (KeyNotFoundException)
            {
            }
        }