/// <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); }