Visual C++ .NET - Aplicar máscara a una imagen

   
Vista:

Aplicar máscara a una imagen

Publicado por kayss (1 intervención) el 07/11/2007 09:36:32
Alguno sabéis de una forma rápida de aplicar una máscara a una imagen en mapa de bits.

Yo primero creo la máscara (matriz nxn), recorro pixel a pixel la imagen, sitúo la máscara y recorro la máscara posición por posición para dicho pixel, y así con todos los demás pixels de la imagen. Pero esto es muy lento.

Os muestro el código que he desarrollado por si es causa de que no está bien planteado:

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Bitmap^ AplicarMascara(Bitmap ^Imagen, Array^ Mascara, int Tamanio){
Bitmap ^ImagenFiltrada=gcnew Bitmap (Imagen->Width, Imagen->Height);
int IncX, IncY, X, Y;
int TamanioNxN=Tamanio*Tamanio;
double Sumatorio;
Color color;

// Aplicamos la máscara para cada uno de los pixels de la imagen
for(int i=0; i<Imagen->Width; i++){
for (int j=0; j<Imagen->Height; j++){

IncY=Tamanio/2;
Sumatorio=0;

// Recorremos los valores de la máscara para aplicarlos a la imagen
for (int k=0; k<Tamanio; k++){

Y=j+IncY;
IncX=Tamanio/2;

for (int q=0; q<Tamanio; q++){
X=i+IncX;
if ((X>=0&&X<Imagen->Width) && (Y>=0&&Y<Imagen->Height))
Sumatorio=Sumatorio + Mascara->GetValue(Tamanio/2+IncX, Tamanio/2+IncY)) * Imagen->GetPixel(X,Y).R;

IncX--;
}

IncY--;
}

// El valor del pixel será el valor del sumatorio obtenido
color=Color::FromArgb(Sumatorio, Sumatorio, Sumatorio);
ImagenFiltrada->SetPixel(i, j, color);
}
}

return ImagenFiltrada;
}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Gracias, un saludo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder