Ejemplo n.º 1
0
        static void Main(string[] args)
        {
            var imagen360 = new Bitmap360(@"C:\Users\Euler\Pictures\SAM_100_0033.jpg");
            var imagenWm  = new WatermarkBitmap(@"C:\Users\Euler\Pictures\ESIME.png");

            Watermarking wm = new Watermarking(imagen360, imagenWm, new Factores(),
                                               //TissotIndicatrix.TopIndicatrix,
                                               //TissotIndicatrix.BottomIndicatrix,
                                               TissotIndicatrix.FirstIndicatrix,
                                               TissotIndicatrix.SecondIndicatrix,
                                               TissotIndicatrix.ThirdIndicatrix,
                                               TissotIndicatrix.FourthIndicatrix
                                               //TissotIndicatrix.FifthIndicatrix,
                                               //TissotIndicatrix.SixthIndicatrix,
                                               //TissotIndicatrix.SeventhIndicatrix,
                                               //TissotIndicatrix.EighthIndicatrix,
                                               //TissotIndicatrix.NinthIndicatrix,
                                               //TissotIndicatrix.TenthIndicatrix,
                                               //TissotIndicatrix.EleventhIndicatrix,
                                               //TissotIndicatrix.TwelfthIndicatrix
                                               );

            wm.Prepare();

            wm.Apply().Save(@"C:\Users\Euler\Pictures\ImagenMarcada10.jpg", ImageFormat.Jpeg);

            Console.ReadKey();
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Se inicializa el marcado de agua.
        /// </summary>
        /// <param name="image360">Imagen 360°</param>
        /// <param name="watermark">Marca de agua</param>
        /// <param name="algorithm">Algoritmo de inserción</param>
        /// <param name="indicatrix">Posiciones donde se realizará el marcado</param>
        public Watermarking(Bitmap360 image360, WatermarkBitmap watermark, IWatermarkAlgorithm algorithm, params TissotIndicatrix[] indicatrix)
        {
            if (indicatrix.Length > 0)
            {
                this._image360       = image360;  //image360.Clone() as Bitmap360;
                this._imageWatermark = watermark; //watermark.Clone() as WatermarkBitmap;

                this._indicatrixes = indicatrix.ToList();

                this._waterMark = new WatermarkBitmap(new Bitmap(image360.Width, image360.Height, watermark.PixelFormat));

                // Se inicializan los fisheye

                this._topFisheye    = new FisheyeBitmap(image360);
                this._bottomFisheye = new FisheyeBitmap(image360);

                // Se asigna el algoritmo

                this._algorithm = algorithm;
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Algoritmo para la inserción de la marca de agua, se emplea un factor de 0.5 por defecto.
        /// </summary>
        internal unsafe Bitmap360 InsertWatermarkUnmanaged(Bitmap360 image360, WatermarkBitmap watermark, double factor = 0.5)
        {
            var factorA = (1 - factor);
            var factorB = factor;

            try {
                image360.LockBits();
                watermark.LockBits();

                Parallel.For(0, image360.Height, fila => {
                    for (int columna = 0; columna < image360.Width; columna++)
                    {
                        // Se obtienen los pixeles

                        var pixel360 = image360[columna, fila];
                        var pixelWM  = watermark[columna, fila];

                        // Solo se toma en cuenta a los pixeles que NO son transparentes

                        if (pixelWM.A == 255)
                        {
                            // Se asigna el pixel resultante

                            image360[columna, fila] = Color.FromArgb(
                                (int)(pixel360.R * factorA + pixelWM.R * factorB),
                                (int)(pixel360.G * factorA + pixelWM.G * factorB),
                                (int)(pixel360.B * factorA + pixelWM.B * factorB));
                        }
                    }
                });
            } finally {
                image360.UnlockBits();
                watermark.UnlockBits();
            }

            return(image360);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Se muestra la marca de agua en landscape
        /// </summary>
        /// <param name="path"></param>
        private async Task DisplayWaterMark(string path)
        {
            // Se obtiene la imagen 360
            try {
                _Watermark = new WatermarkBitmap(path);

                WatermarkImage = null;
                RaisePropertyChanged(nameof(WatermarkImage));

                await Task.Factory.StartNew(() => {
                    WatermarkImage = new BitmapImage();

                    WatermarkImage.BeginInit();
                    WatermarkImage.StreamSource = new MemoryStream(File.ReadAllBytes(path));
                    WatermarkImage.EndInit();


                    WatermarkImage.Freeze();

                    RaisePropertyChanged(nameof(WatermarkImage));
                });

                var flyout = _metroWindow.Flyouts.Items[2] as Flyout;
                flyout.IsOpen = !flyout.IsOpen;
            } catch (Exception e) {
                await DialogManager.ShowMessageAsync(_metroWindow, "Vuelva a intentarlo", e.Message, settings : new MetroDialogSettings()
                {
                    ColorScheme = MetroDialogColorScheme.Accented
                });

                _Watermark = null;

                WatermarkImage = null;
                RaisePropertyChanged(nameof(WatermarkImage));
            }
        }
Ejemplo n.º 5
0
 /// <summary>
 /// Se realiza la inserción de la marca de agua en toda la imagen 360° a partir de una coordenada (X, Y) de la imagen 360°.
 /// Se emplea un factor de 0.5.
 /// </summary>
 /// <param name="image360">Imagen 360°</param>
 /// <param name="watermark">Marca de agua</param>
 /// <param name="x">Indice X</param>
 /// <param name="y">Indice Y</param>
 public Bitmap InsertWatermark(Bitmap360 image360, WatermarkBitmap watermark, int x, int y)
 {
     return(InsertWatermarkUnmanaged(image360, watermark, this.Factor)._image);
 }
Ejemplo n.º 6
0
 /// <summary>
 /// Se realiza la inserción de la marca de agua en toda la imagen 360°.
 /// Se emplea un factor de 0.5.
 /// </summary>
 /// <param name="image360">Imagen 360°</param>
 /// <param name="watermark">Marca de agua</param>
 public Bitmap InsertWatermark(Bitmap360 image360, WatermarkBitmap watermark)
 {
     return(InsertWatermark(image360, watermark, 0, 0));
 }