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
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


0