|
Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.
Mensajes - KAYSS
Páginas: [1]
1
« en: Martes 4 de Agosto de 2009, 11:55 »
No, de este modo podes pasar un puntero al objeto, con lo cual podes acceder a todos sus miembros.
Digamos que tenes:
Clase *c; //un puntero a un objeto tu clase, usaste new en algnun momento para crear el objeto
Entonces creas el hilo:
CreateThread(0, 0, (LPTHREAD_START_ROUTINE)Hilo, (LPVOID)c, 0, 0);
Y en el hilo:
DWORD WINAPI Hilo(LPVOID lpParameter) { Clase *c = (Clase*)lpParameter; c->loQueSea; c->otraCosa(); }
Muchas gracias, Ya me queda todo más claro. Gracias y saludos
2
« en: Martes 4 de Agosto de 2009, 08:56 »
Los hilos reciben un parametro, cuando creas el hilo podes pasar el puntero al objeto de la clase en cuestion que estes usando. Muchas gracias, Me has solucionado el problema con uno de los hilos. Sin embargo, en otro de los thread necesito acceder a varios atributos de la clase que son punteros y de este modo únicamente puedo pasarle uno. Gracias y saludos
3
« en: Lunes 3 de Agosto de 2009, 21:40 »
Hola a tod@s!
Mi problema es que necesito acceder desde el método, que va a ejecutar como un thread y por tanto es estático, a un artributo de la clase que es un puntero a una imagen, lo cual me dice al compilar que no es posible.
Cómo podría acceder a este atributo que es un puntero desde el thread?
Gracias y saludos
4
« en: Lunes 3 de Marzo de 2008, 11:47 »
El problema lo he solucionado instalando automake
Sin embargo, ahora me da el siguiente error:
configure: error: c++ preprocessor "/lib/cpp" fails sanity check
Gracias, Juan
5
« en: Viernes 29 de Febrero de 2008, 16:38 »
El problema es que ya tengo instalado el Autoconf 2.61
Saludos, Juan
6
« en: Viernes 29 de Febrero de 2008, 16:31 »
Hola a todos,
Quisiera saber si vosotros me podríais decir la causa de que KDevelop (v. 3.5) no me deje compilar un nuevo proyecto.
El mensaje que me muestra es:
./admin/cvs.sh: 651: --version: not found *** AUTOCONF NOT FOUND!. *** KDE requires autoconf 2.53 or newer make[1]: *** [cvs] Error 1 make: *** [all] Error 2 *** Exited with status: 2 ***
Saludos, Juan
7
« en: Viernes 9 de Noviembre de 2007, 20:18 »
Muchas gracias por todo!!! Un saludo
8
« en: Jueves 8 de Noviembre de 2007, 11:23 »
Muchas gracias de nuevo, todos tus consejos me han sido de gran ayuda.
Aplicaré todo lo que me dices
Un saludo
9
« en: Jueves 8 de Noviembre de 2007, 01:19 »
Muchas gracias por la ayuda, Juan Carlos. He aplicado lo que me propones y he conseguido reducir de 2 minutos y medios a 1 minuto y medio el tiempo empleado en aplicar una máscara 3x3 a una imagen, que aunque sigue siendo mucho tiempo pero mejora el anterior. Te muestro el código resultante: 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; }
Gracias, un saludo
10
« en: Miércoles 7 de Noviembre de 2007, 10:27 »
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
11
« en: Martes 6 de Noviembre de 2007, 17:55 »
Ok!
Entonces a partir de ahora miro en ese hilo.
Gracias
12
« en: Martes 6 de Noviembre de 2007, 17:12 »
Pero si es código en Windows Form de Visual Studio .Net?
13
« en: Martes 6 de Noviembre de 2007, 10:48 »
Muchas gracias por la ayuda!!! Supongo que en este caso me debería centrar más en optimización de código. Como no se exactamente a lo que te refieres exactamente en las opciones que me propones para optimizar el código, os muestro mi algoritmo y a ver si con el podemos hacer algo: 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; }
Muchas gracias por todo. Un saludo
14
« en: Viernes 2 de Noviembre de 2007, 21:27 »
Hola!
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.
Como os podeis imaginar esto tarda mucho en ejecutarse para una imagen de una resolución media.
Espero algunos sepais algún método más rápido
Saludos
15
« en: Sábado 8 de Septiembre de 2007, 20:00 »
He encontrado una solución pero es muy lenta (3, 4 seg en procesarla), a ver si me podéis decir otra o una modificación de esta más rápida:
double bn; Color color, ColorBN;
for(int i=0; i<Imagen->Width; i++){ for (int j=0; j<Imagen->Height; j++){ color=Imagen->GetPixel(i,j); bn=(double) ((color.R*30)+(color.G*59)+ (color.B*11)); ColorBN=Color::FromArgb(bn,bn,bn); ImagenBN->SetPixel(i,j,ColorBN); } }
this->PictureBoxImagen->Image=this->ImagenBN;
Saludos, kayss
16
« en: Domingo 2 de Septiembre de 2007, 14:44 »
Hola,
Cuál sería la manera de insertar crear gráficas, histogramas, digramas desectores, etc. en un proyecto en Visual C++. Es para mostrar una serie de comparativas de datos.
Gracias.
17
« en: Lunes 28 de Mayo de 2007, 17:18 »
Hola!
Quería preguntaros si me podríais decir como cambiar el formato de una variable de tipo String ^ a negrita
Gracias
18
« en: Miércoles 8 de Enero de 2003, 00:18 »
TIOS TENGO PROBLEMAS CON EL JUEGO DEL TETRIS, si alguien sabe como se hace o lo ha hecho ya puede ayudarme. GRACIAS!!! kayss@hotmail.com
19
« en: Martes 7 de Enero de 2003, 23:50 »
TIOS TENGO PROBLEMAS CON EL JUEGO DEL TETRIS, si alguien que sepa como hacerlo o lo haya hecho pueda ayudarme. GRACIAS!!!! kayss@hotmail.com
Páginas: [1]
|
|
|