Exemple #1
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);
        }