- Bitmap^ AplicarMascara2(System::Drawing::Bitmap ^Imagen, cli::array<int>^ Mascara, int Tamanio){ 
-    this->ImagenFiltrada=gcnew System::Drawing::Bitmap (Imagen); 
-    int i, j, k, q, IncX, IncY, X, Y, ValorPixel, PosVectorRGB; 
-    int TamanioNxN=Tamanio*Tamanio; 
-    double Sumatorio; 
-    Color color; 
-    int Cte1=Tamanio/2; 
-   
-    // formato de pixel 
-    PixelFormat pxf = PixelFormat::Format24bppRgb; 
-   
-    // Bloqueamos los pixels de la imagen original y la filtrada 
-    Rectangle rect = System::Drawing::Rectangle(0, 0, Imagen->Width, Imagen->Height); 
-    BitmapData ^bmpDatosOriginal = Imagen->LockBits(rect, ImageLockMode::ReadWrite, pxf); 
-    BitmapData ^bmpDatosFiltrada = ImagenFiltrada->LockBits(rect, ImageLockMode::ReadWrite, pxf); 
-   
-    // Obtenemos la direcciones de comienzo 
-    IntPtr ptrOriginal = bmpDatosOriginal->Scan0; 
-    IntPtr ptrFiltrada = bmpDatosFiltrada->Scan0; 
-   
-    // Declaramos los arrays para almacenar los bytes de los bitmaps 
-    int numBytes = Imagen->Width * Imagen->Height * 3; 
-    array<Byte> ^valoresRGBOriginal = gcnew array<Byte>(numBytes); 
-    array<Byte> ^valoresRGBFiltrada = gcnew array<Byte>(numBytes); 
-   
-    // Copiamos los valores RGB a los arrays 
-    Marshal::Copy(ptrOriginal, valoresRGBOriginal, 0, numBytes); 
-    Marshal::Copy(ptrFiltrada, valoresRGBFiltrada, 0, numBytes); 
-   
-    // Recorremos la imagen 
-    for(i=0; i<Imagen->Width; i++){ 
-      for (j=0; j<Imagen->Height; j++){ 
-        
-        IncY=Cte1; 
-        Sumatorio=0; 
-   
-        // Recorremos la máscara 
-        for (k=0; k<Tamanio; k++){ 
-          
-          Y=j+IncY; 
-          IncX=Cte1; 
-   
-          for (q=0; q<Tamanio; q++){ 
-            X=i+IncX; 
-            if ((X>=0&&X<Imagen->Width)&&(Y>=0&&Y<Imagen->Height)){ 
-              Sumatorio=Sumatorio+ 
-              Convert::ToDouble(Mascara[(Cte1+IncX)*3 + (Cte1+IncY)])* 
-              Convert::ToDouble(valoresRGBOriginal[(Y*Imagen->Width+X)*3]); 
-            } 
-            IncX--; 
-          } 
-          IncY--; 
-        } 
-        
-        // El valor del pixel será el valor del sumatorio obtenido 
-        if (Sumatorio>0)ValorPixel=Convert::ToInt32(Sumatorio)%255; 
-        else ValorPixel=0; 
-        PosVectorRGB=(j*Imagen->Width+i)*3; 
-        valoresRGBFiltrada[PosVectorRGB]=ValorPixel; 
-        valoresRGBFiltrada[PosVectorRGB+1]=ValorPixel; 
-        valoresRGBFiltrada[PosVectorRGB+2]=ValorPixel; 
-      } 
-    } 
-   
-    // Copiamos de nuevo los valores del array al bitmap 
-    Marshal::Copy(valoresRGBFiltrada, 0, ptrFiltrada, numBytes); 
-   
-    // Desbloqueamos los bytes 
-    ImagenFiltrada->UnlockBits(bmpDatosFiltrada); 
-    Imagen->UnlockBits(bmpDatosOriginal); 
-   
-    return ImagenFiltrada; 
- } 
-