• Martes 13 de Mayo de 2025, 11:26

Mostrar Mensajes

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

Páginas: 1 2 3 [4] 5 6
76
La taberna del BIT / Re: Cuentame Un Chiste
« en: Jueves 2 de Noviembre de 2006, 16:21 »
¿ LA SIRVIENTA BRUTA...?

-Anda, María, abre la puerta que no te va a pasar nada malo. Sólo vamos a gozar mucho.
- No, siñor, tese quieto!.
- Mira, María, si abres te aumento el sueldo...
- ¿Y, luego quí li dicimos a la patrona?
- Pues nada, ella no tiene porque enterarse de nada.
- Ta bueno, patrón, pero pase por dibajo di la puerta su cirtificado de que
no tiene SIDA.
Don Luis recuerda el chequeo médico que se acaba de practicar y le pasa hasta su acta de nacimiento, ante lo cual la sirvienta por fin cede y Don Luis se da el gustazo. Al rato ya calmado y disfrutando de un buen tabaco, le dice Don Luis a la sirvienta:
-¡Caramba, María, no sabes leer ni escribir, pero, que bien estas enterada de las cuestiones de salud!
- Si, patroncito, yo seré disnorante, muy disnorante, rete  disnorante, pero esto del Sida no me lo pegan dos veces!

77
Retos / Re: Formato Bmp
« en: Miércoles 16 de Agosto de 2006, 05:01 »
:bravo: También a mi me gustaron tus comentarios  :rolleyes:  sobre los proyectos JuanK, voy a ver si este finde le doy una mirada a los otros programas  :comp:

En cuanto al manejo de memoria, aprovecho a preguntarte que dimensiones tenia el bmp que reventó. A lo mejor era mayor a 1024x768 y revento porque superó el tamaño maximo de la matriz que definí.
Ya se que tendría que haber utilizado una matriz dinámica en lugar de una estática, pero por alguna extraña razón el gasto de memória era mucho mayor y reventaba con bmp's no muy grandes :blink:

Bueno, este reto me gustó mucho, la verdad que al principio no creí que mi programa llegara a funcionar... en el camino me di cuenta que no estaba solo  :D  pues fueron varios los que me dieron una mano, y al final salió  :jumpie: y aprendí varias cosas que al principio no sabía y que posiblemente pueda aplicar en un futuro no muy lejano, tal vez en el próximo reto, no lo se... y otra cosa que me gustó fue que se dio la posibilidad de compartir conocimiento (inteligencia colectiva), de alguna manera todos aprendimos algo de los demás.... cosa que desgraciadamente no sucede muy a menudo  :(

No se como será el próximo reto, pero igualmente me gustaría participar. :comp:

78
C++ Builder / Re: Apis En C++ Builder
« en: Jueves 3 de Agosto de 2006, 03:57 »

79
Retos / Re: Formato Bmp
« en: Sábado 29 de Julio de 2006, 01:07 »
Gracias JuanK y Enko... :rolleyes:

... ya está terminado!! :jumpie:
Al final no fue necesario utilizar WM_ACTIVATE o set focus y tampoco fue necesario dibujar la imagen en un HDC de memoria. El problema que tenía con el refresco de pantalla era a causa del orden en que había declarado algunas variables, pero todo se solucionó declarándolas en el orden conveniente :smartass: .
Bueno, creo que eso es todo (JuanK: acabo de mandarte los archivos), agradezco a todos los que me ayudaron y ahora entiendo un poco como funciona la win32 Bored API  ;)

80
Retos / Re: Formato Bmp
« en: Viernes 28 de Julio de 2006, 01:48 »
Cita de: "JuanK"
invalidate
usa invalidate para forzar el refresco de la ventana.
 :D Lo más parecido a invalidate que encontré fue:
Código: Text
  1.  
  2. BOOL InvalidateRect(
  3.     HWND hWnd,            // manipulador de la ventana con la región de actualización modificada  
  4.     CONST RECT * lpRect,  // dirección del rectángulo con las coordenadas
  5.     BOOL bErase           // flag de borrado de fondo
  6.    );
  7.  
  8.  
... tuve que crear un rectángulo con las dimensiones de la ventana y luego lo utilizo para refresar... y funciona!!! :D

Ahora... si minimizo la pantalla o si se superpone alguna otra ventana sobre la que contiene el bitmap, éste se borra  :angry:

Por lo que estuve leyendo, eso pasa porque SetPixelV está pintando sobre la memoria de video y no sobre la memoria ram <_<
Por lo que estuve leyendo parecería que esto se soluciona con la función BitBlt, así que intentaré utilizarla, a ver que pasa :unsure:

81
Retos / Re: Formato Bmp
« en: Viernes 28 de Julio de 2006, 00:30 »
cada vez me falta menos :rolleyes:
Ahora necesito refrescar la pantalla para que se actualice el bitmap cuando cargo algún otro por segunda vez. He intentado destruyendo la estructura que contiene el bitmap pero perecería que no basta con eso, ya que el primer bitmap cargado que aparece en pantalla queda fijo... lo extraño es que si abro otra ventana y la coloco sobre el area en que aparece el dibujo...  éste desaparece (o mejor dicho se borra) :huh: y si vuelvo a cargar otro bitmap, se muestra correctamente en pantalla  :think:

Se me ocurrió hacer algo como esto:
Código: Text
  1.  
  2. ...
  3. case WM_PAINT:
  4.    ...
  5.    DeleteDC(hDC);
  6.    hDC = BeginPaint(hwnd, &ps);
  7.    ...
  8.    ...
  9.    EndPaint(hwnd, &ps);
  10.  
  11.  
... pero tampoco dió resultado :(

82
Retos / Re: Formato Bmp
« en: Jueves 27 de Julio de 2006, 00:27 »
Cita de: "JuanK"
sugerencia...
1- Consiguete un compilador mejor, descargate el visual C++ .net express desde la pagina de microsoft o quie se yo el que quieras pero cambia el que tienes.

2- Enviame tu codigo a mi mail en un archivo .rar lo revisare y tratare de detectar donde esta el problema para que lo corrijas.  :smartass:

juank.ruiz@gmail.com
Muchas gracias por tu interés y ayuda JuanK, pero... acabo de descubrir donde estaba el ERROR :jumpie:

En el procedimiento WindowProcedure, en la parte en que se inicializa el OPENFILENAME (Initialize OPENFILENAME), hay una línea que dice: ofn.hwndOwner = hwnd;
bueno, si quito u oculto esa línea... se soluciona el problema!!... la verdad que no sé muy bien porqué se soluciona, tal vez porque el cabezal de WindowProcedure ya contiene una variable de tipo HWND y al hacer ofn.hwndOwner = hwnd; se inicializaba algo que no debía. Sea como sea, si no surge algún otro imprevisto te puedo decir que ahora casi estoy por terminar el reto, me faltan agregar unas cosillas menores (eso espero :blink: ) y listo.

83
Retos / Re: Formato Bmp
« en: Miércoles 26 de Julio de 2006, 23:40 »
Cita de: "JuanK"
y le has hecho debug paso a paso?

que cadena esta llegando al propceso del bitmap cuando ocurre el llamado?  :rolleyes:
si, intenté con el debug que viene con el dev-cpp, previamente habiendo marcado en las opciones del compilador la opción para que generara la información de debug al linkear, el tema es que por más que intento hacerle un watch a la variable szFile o ofn.lpstrFile o a la que sea, no quiere aceptar las variables (al seleccionar añadir watch). Se me ocurrió entonces que tal vez el gdb no era el último y efectivamente, busque entre las actualizaciones y veo que está el GNU gdb 6.3 y el que tenía antes era el 5.1, pero lo actualicé y sigo sin poder hacer watch y sin poder debugear paso a paso, cosa que no sucede si intento debugear cualquier código que corra en DOS.

Citar
que cadena esta llegando al propceso del bitmap cuando ocurre el llamado?
Como no puedo utilizar el debug  :(  lo que hice fue colocar un message box antes de que se haga el llamado al bitmap:

Código: Text
  1. MessageBox(hwnd,szFile, "valor de szFile", MB_OK);
  2.           bmp=CargarBitmapArchivo(szFile);
  3.  
... y el message box esta desplegando la ruta correctamente al igual que la etiqueta:
Código: Text
  1. TextOut(hDC, 10, 300, szFile, strlen(szFile));
  2.  
... que dibuja en pantalla la cadena del path.

Probé con ofn.lpstrFile en lugar de szFile y no se soluciona nada, y tambien haciendo:
Código: Text
  1. ZeroMemory(&szFile, sizeof(szFile)); o memset(szFile,'\0',sizeof(szFile));
  2.  
En este último caso, la cosa empeora porque si agrego alguna de esas líneas de código al correr el ejecutable explota en la línea TextOut(hDC...

Citar
Ademas debes verificar y estar seguro que la cantidad de caracteres del path , en tu caso nunca supere los 259 caracteres, o bien cambiar la forma en que defines el ancho de la cadena porque esta algo limitado.
Si, esto es algo que supongo se podría mejorar, pero por el momento no estoy probando con rutas de más de 259 caracteres, como mucho tendrán unos 20 caracteres, así que no creo que esté fallando por ese lado.

También intenté limpiando (por las dudas) la cadena szFile:
Código: Text
  1. char cadena[strlen(szFile)];  
  2. strncpy(cadena,szFile,strlen(szFile));
  3. cadena[strlen(szFile)]='\0';
  4.  
... y tampoco :(

Y por el momento eso es todo lo que he intentado, acepto sugerencias, críticas, etc.

84
Retos / Re: Formato Bmp
« en: Miércoles 26 de Julio de 2006, 15:49 »
lamentablemente... sigo teniendo problemas con la ruta del bitmap  :(
Mi último intento un poco más coherente y entendible que el anterior ;) es el siguiente:
Código: Text
  1.  
  2. LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
  3. {
  4. OPENFILENAME ofn;       // common dialog box structure
  5. static char szFile[260];       // buffer for file name
  6. //HWND hwnd;              // owner window
  7. HANDLE hf;              // file handle
  8.  
  9. // Initialize OPENFILENAME
  10. ZeroMemory(&ofn, sizeof(ofn));
  11. ofn.lStructSize = sizeof(OPENFILENAME);//sizeof(ofn);
  12. ofn.hwndOwner = hwnd;
  13. ofn.lpstrFile = szFile;
  14. //
  15. // Set lpstrFile[0] to '\0' so that GetOpenFileName does not
  16. // use the contents of szFile to initialize itself.
  17. //
  18. //ofn.lpstrFile[0] = '\0';
  19. ofn.nMaxFile = sizeof(szFile);
  20. ofn.lpstrFilter = "bmp\0*.BMP\0";
  21. ofn.nFilterIndex = 1;
  22. ofn.lpstrFileTitle = NULL;
  23. ofn.nMaxFileTitle = 0;
  24. ofn.lpstrInitialDir = NULL;
  25. ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
  26.  
  27.  
  28. static HINSTANCE hInstance; // inicializo instancia.
  29.  
  30. HDC hDC;
  31. PAINTSTRUCT ps;    
  32. unsigned long x,y;    
  33. static imagenBMP *bmp;
  34. static bool dibujarBMP=false;
  35.  
  36.  
  37.     switch (msg)                  /* manipulador del mensaje */
  38.     {
  39.         case WM_CREATE:
  40.          hInstance = ((LPCREATESTRUCT)lParam)->hInstance;
  41.          break;
  42.         case WM_PAINT:      
  43.          if (dibujarBMP){
  44.           //bmp=CargarBitmapArchivo("E:\\img\\graf1.bmp");                              
  45.           bmp=CargarBitmapArchivo(szFile);                                        
  46.           hDC = BeginPaint(hwnd, &ps);
  47.           TextOut(hDC, 10, 300, szFile, strlen(szFile));            
  48.           for(y =0;y< getAltoBitmap(bmp); y++){
  49.            for(x = 0; x < getAnchoBitmap(bmp); x++)
  50.              SetPixel(hDC,x,y,getPixelMatrizBMP(y,x,bmp));
  51.           }          
  52.           EndPaint(hwnd, &ps);
  53.           dibujarBMP=false;
  54.           }  
  55.          break;
  56.         case WM_COMMAND:
  57.            switch(LOWORD(wParam)) {
  58.               case CM_ABRIR:
  59.                 // Display the Open dialog box.
  60.                 if (GetOpenFileName(&ofn)==TRUE){
  61.                   hf = CreateFile(ofn.lpstrFile, GENERIC_READ,0, (LPSECURITY_ATTRIBUTES) NULL,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,(HANDLE) NULL);                                                
  62.                   dibujarBMP=true;                                              
  63.                   MessageBox(hwnd,szFile, "Mensaje de prueba", MB_OK);                  
  64.                 }
  65.                 break;
  66.               case CM_SALIR:
  67.                  PostQuitMessage(0);    /* envía un mensaje WM_QUIT a la cola de mensajes */
  68.                  break;
  69.            }
  70.            break;  
  71.         case WM_DESTROY:
  72.            PostQuitMessage(0);    /* envía un mensaje WM_QUIT a la cola de mensajes */
  73.            break;
  74.         default:                  /* para los mensajes de los que no nos ocupamos */
  75.            return DefWindowProc(hwnd, msg, wParam, lParam);
  76.     }
  77.     return 0;
  78. }
  79.  
Por lo que he leido necesariamente el código que dibuja el bitmap en pantalla tiene que estar en WM_PAINT, pero para pasarle la ruta del archivo que quiero cargar tengo que controlar con un booleano que se inicializa a true cuando se selecciona el archivo a cargar con GetOpenFileName. Lo que está pasando y siempre me ha pasado y me sigue dando error  :angry:  es que la variable szFile (que tiene almacenada la ruta del bitmap) no parece llegar al WM_PAINT. Llegue a pensar que podria estar pasando que llegara con caracteres basura, pero aparentemente no es eso, tambien he intentado limpiar la cadena y nada, tampoco funciona una variable global.

Sin embargo, si anulo la linea: bmp=CargarBitmapArchivo(szFile);
y habilito: bmp=CargarBitmapArchivo("E:\\img\\graf1.bmp");
se carga correctamente graf1.bmp y lo mas extraño es que: TextOut(hDC, 10, 300, szFile, strlen(szFile)); muestra en pantalla cualquier ruta que seleccione con
GetOpenFileName. Entonces si el TextOut está mostrando la ruta  correctamente, ¿por qué razón no funciona bien szFile?... ya no se que pensar...  :(

85
Retos / Re: Formato Bmp
« en: Lunes 24 de Julio de 2006, 16:24 »
Cita de: "JuanK"
Cita de: "Danielo"
Lo que pasa es que cuando se abre un fichero en C++ con fopen y el archivo tiene path, hay que abrirlo así :(  :
Código: Text
  1. FILE* handle = fopen("D:\\path-name\\fichero.nnn", "r+b");
  2.  
más info en: http://www.zator.com/Cpp/E5_5_2a.htm
sigo sin entender tu problema... es decir y que hay con eso. por eso no te puede fallar  ;)
si no está fallando eso, el error debe estar por otro lado y me temo que es porque el procedimiento que muestra el bitmap en pantalla no puede recibir la ruta y el archivo a cargar:
Código: Text
  1. /*  Esta función es invocada por la función DispatchMessage()  */
  2. LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
  3. {
  4. OPENFILENAME ofn;       // common dialog box structure
  5. char szFile[260];       // buffer for file name
  6. HANDLE hf;              // file handle
  7.  
  8. // Initialize OPENFILENAME
  9. ZeroMemory(&ofn, sizeof(ofn));
  10. ofn.lStructSize = sizeof(ofn);
  11. ofn.hwndOwner = hwnd;
  12. ofn.lpstrFile = szFile;
  13. //
  14. // Set lpstrFile[0] to '\0' so that GetOpenFileName does not
  15. // use the contents of szFile to initialize itself.
  16. //
  17. ofn.lpstrFile[0] = '\0';
  18. ofn.nMaxFile = sizeof(szFile);
  19. ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0";
  20. ofn.nFilterIndex = 1;
  21. ofn.lpstrFileTitle = NULL;
  22. ofn.nMaxFileTitle = 0;
  23. ofn.lpstrInitialDir = NULL;
  24. ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
  25.  
  26. static HINSTANCE hInstance; // inicializo instancia... no si sirve para algo
  27.  
  28. HDC hDC;
  29. PAINTSTRUCT ps;    
  30. unsigned long x,y;    
  31.  
  32.     switch (msg)                  /* manipulador del mensaje */
  33.     {
  34.         case WM_COMMAND:
  35.            switch(LOWORD(wParam)) {
  36.               case CM_ABRIR:
  37.                 // Display the Open dialog box.
  38.                 if (GetOpenFileName(&ofn)==TRUE){
  39.                   hf = CreateFile(ofn.lpstrFile, GENERIC_READ,0, (LPSECURITY_ATTRIBUTES) NULL,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,(HANDLE) NULL);
  40.                                    
  41.                 MessageBox(hwnd, szFile, "Mensaje de prueba", MB_OK); // Muestra ruta del bitmap
  42.                 imagenBMP *bmp=CargarBitmapArchivo(szFile);
  43.                  hDC = BeginPaint(hwnd, &ps);
  44.                  for(y =0;y< getAltoBitmap(bmp); y++){
  45.                   for(x = 0; x < getAnchoBitmap(bmp); x++)
  46.                   SetPixelV(hDC,x,y,getPixelMatrizBMP(y,x,bmp));
  47.                  }
  48.                  EndPaint(hwnd, &ps);
  49.                 }
  50.                 break;
  51.               case CM_SALIR:                
  52.                  PostQuitMessage(0);    /* envía un mensaje WM_QUIT a la cola de mensajes */
  53.                  break;
  54.            }
  55.            break;  
  56.         case WM_DESTROY:
  57.            PostQuitMessage(0);    /* envía un mensaje WM_QUIT a la cola de mensajes */
  58.            break;
  59.         default:                  /* para los mensajes de los que no nos ocupamos */
  60.            return DefWindowProc(hwnd, msg, wParam, lParam);
  61.     }
  62.     return 0;
  63. }
  64.  
Mi programa, tiene un menú sencillo que por ahora solo tiene la opción de Abrir y Salir, entonces, cuando selecciono Abrir se ejecuta GetOpenFileName y obtengo la ruta y nombre del bitmap a mostrar en pantalla, luego veo la ruta con un messagebox y se ve correctamente.
El problema tal vez viene en el paso siguiente ya que me sale un mensaje que dice:
"se ha detectado un problema y debe cerrarse"

Aparentemente lo que pasa es que salta el error cuando se procesa:

imagenBMP *bmp=CargarBitmapArchivo(szFile);

Esta función lo que hace es leer los datos del bitmap y funciona bien porque la he probado, es por eso que en un principio pensé que el path y el archivo que vienen en szFile no estaban siendo bien interpretados por fopen (función que se encuentra detro de CargarBitmapArchivo.

Tal vez no es dentro del case CM_ABRIR que tengo que escribir el codigo de mostrar  el bitmap en pantalla, no lo se. He intentado escribir ese mismo código en el case CM_PAINT y tampoco funciona bien :(

86
Retos / Re: Formato Bmp
« en: Lunes 24 de Julio de 2006, 15:05 »
Lo que pasa es que cuando se abre un fichero en C++ con fopen y el archivo tiene path, hay que abrirlo así :(  :
Código: Text
  1. FILE* handle = fopen("D:\\path-name\\fichero.nnn", "r+b");
  2.  
más info en: http://www.zator.com/Cpp/E5_5_2a.htm

87
Retos / Re: Formato Bmp
« en: Lunes 24 de Julio de 2006, 05:37 »
Cita de: "Geo"
Yo usaría una variable global (no he programado una aplicación con la WinAPI), y para obtener el nombre del archivo mediante un diálogo:

GetOpenFileName Function

Saludos,
JJ (Geo).
ya me parecía raro que no existiera algo parecido a los InputBox :D .
Buena idea lo de la variable global, vengo intentandolo desde hace un buen rato  :(  y ahora me doy cuenta donde estaba la falla: por alguna extraña razón la maravillosa función GetOpenFileName retorna rutas como por ejemplo esta:

c:\imagenes\archivo.bmp

y me estaba dando error porque mi procedimiento de cargar bitmpap:

imagenBMP *CargarBitmapArchivo(char nombreArchivo[]);

espera: c:\\imagenes\\archivo.bmp

ahora me doy cuenta que el carácter "\" al ser un carácter de escape, era lo que me estaba dando problemas  <_< .

Viendo la documentación de GetOpenFileName parecería que no hay forma de convertir la ruta al "formato" que entiende mi CargarBitmapArchivo, así que a menos que alguien me diga lo contrario creo que no tendré más remedio que implementar un procedimiento que solucione el problema del carcacter de escape "\"

88
Retos / Re: Formato Bmp
« en: Sábado 22 de Julio de 2006, 21:16 »
Estoy teniendo lío con la parte de cargar el bmp desde cualquier ubicación, primero se me ocurrió utilizar un treeview para obtener la ruta y un listbox para obtener el nombre del archivo. El tema es que como lo estoy haciendo con el API no me está resultando para nada sencillo.
Ahora estoy intentando con un cuadro de diálogo que contiene 2 controles edit, uno para introducir manualmente la ruta y el otro para el nombre del bmp y 2 botones (Aceptar y Cancelar). Cuando escribo la ruta y el nombre se que están funcionando porque las puedo ver con un MessageBox, pero a la hora de asignarle la ruta al procedimiento que me carga el bitmap me da error, debido a que tiene que estar necesariamente entre:

Código: Text
  1. case WM_PAINT:
  2.            ...
  3.            ...
  4.            break;
  5.  

y el botón Aceptar está dentro de:
Código: Text
  1. WM_COMMAND:
  2.            ...
  3.            ...
  4.            break;
  5.  

o sea, no veo la forma de ejecutar lo que está dentro del WM_PAINT desde dentro del WM_COMMAND

intuyo que la solución debe estar en hacer una función que retorne la ruta y nombre de archivo obtenida a partir del cuadro de diálogo, pero por ahora no se me ocurre como hacerla  :(

89
Pascal / Re: Crear Nodo Y Forma De Implementarlo
« en: Sábado 22 de Julio de 2006, 18:37 »
A ver si esto te sirve de ayuda :D :
Código: Text
  1.  
  2. TYPE Punto=RECORD
  3.         x,y:Integer;
  4.         END;
  5.  
  6.         Coordenada=^Punto;
  7. VAR coord:Coordenada;
  8. BEGIN
  9.   (* Creamos una localidad de memoria *)
  10.   NEW(coord);
  11.   (* Asignamos valores *)
  12.   coord^.x:=10;
  13.   coord^.y:=20;
  14.   Write(coord^.x);
  15.   Write(coord^.y);
  16.   (* Liberamos la memoria *)
  17.   Dispose(coord);
  18. END.
  19.  

Citar
He visto que se usa el signo ^ para los apuntadores, pero no recuerdo si el signo se regiere a la direccion o al valor, en casos donde colocan ^p.inf

Si tienes p y q variables de tipo puntero, cuando haces:

p:=q

estás apuntando p al "valor" de q, esto es conocido como alias. Y si llegaras a borrar el valor de lo que está apuntando p, tambien estarías eliminando lo que está apuntando q.

en cambio su haces esto:

^p:=^q

estás copiando sin compartir memoria en p lo que está apuntando q, en este caso si borras lo apuntado por p, no se borra lo apuntado por q.

90
Retos / Re: Formato Bmp
« en: Jueves 20 de Julio de 2006, 03:59 »
Cita de: "Geo"
Como lo pones, me parece que estás guardando cada componente de color (1 byte) en un COLORREF (dword, 4 bytes), lo cual me parece un desperdicio pues bien podrías guardar las tres componentes de un pixel en un COLORREF.

Porque, ahora habría que ver cómo estás pintando la matriz al HDC :P. Lo más probable es que estés pintando solo rojo porque sólo estás estableciendo la componente roja de tus COLORREF :).
Gracias Geo!!... ahora siiiii!!! los bitmaps aparecen con todos sus colores!!  :bravo:

Efectivamente, entre otras cosas eso es exactamente lo que estaba pasando, gracias a tu buena explicación ahora lo veo claramente.
Lo que yo intentaba era capturar cada pixel (azul, verde, rojo) como un unsigned char y como no sabía de la existencia de la funcion RGB(r,v,a) muy ingenuamente esperaba que el fgetc hiciera todo el proceso de conversión, por supuesto, no me parecía nada coherente, pero era lo único que tenía  :(

Para terminar el reto, ahora me esta faltando resolver la parte de cargar cualquier bitmap, asi que ya estoy poniendo manos a la obra y en una de esas tengo todo pronto para el finde  :D

91
Retos / Re: Formato Bmp
« en: Martes 18 de Julio de 2006, 02:36 »
Gracias Geo y Nagisa...

He logrado disminuir un poco (al menos por el momento) el problema cambiando la estructura de la matriz de bits, porque por lo visto la que estaba utilizando:
Código: Text
  1. struct TMatriz{
  2.          COLORREF **coords;
  3.          int maxX,maxY;
  4.       };
  5.  
en el momento de crearla consumía mucha memoria y se desbordaba. Asi que de no muy buena gana ahora estoy con una matriz estática:
Código: Text
  1. DWORD matriz[MAXLARGO][MAXANCHO*3];
  2.  
y ahora al menos puedo cargar el bmp en pantalla, pero sigo teniendo el problema de que cuando lo muestro se ve en rojo y negro.
Citar
¿Y cómo realizas la lectura de tu matriz de colores?
Todo esta apuntando a que no estoy leyendo bien la matriz, pero no logro darme cuenta, el código lo he escrito según lo que he leido y he entendido en este foro y lo adjunto, en una de esas alguien ve algo que yo no veo:
Código: Text
  1. int alto=getAltoBitmap(bmp);
  2.  int ancho=getAnchoBitmap(bmp);
  3.  int x,y;
  4.  DWORD tmpByte;
  5.  
  6.  int bytesRelleno = (bool)((getAnchoBitmap(bmp)*3) % 4) * (4 - ((getAnchoBitmap(bmp)*3) % 4));
  7.  fseek(arch, getNumBytesHastaPixel(bmp), SEEK_SET);
  8.  for(y=alto; y > 0; y--) {
  9.    for(x = 0; x < ancho*3; x++)    
  10.     cargarMatrizBMP(y-1,x,fgetc(arch),bmp);
  11.     for(x = 0; x < bytesRelleno; x++)
  12.             tmpByte = fgetc(arch);
  13.    
  14.  }
  15.  

... y la función CargarMatrizBMP:
Código: Text
  1. void cargarMatrizBMP(int x,int y, DWORD valor,imagenBMP *bmp){
  2.   bmp->matriz[x][y]=valor;
  3. }
  4.  

92
Retos / Re: Formato Bmp
« en: Lunes 17 de Julio de 2006, 16:32 »
Estoy teniendo problemas con la matriz de colores que la definí de la siguiente manera:
Código: Text
  1. struct TMatriz{
  2.           COLORREF **coords;
  3.           int maxX,maxY;
  4.        };
  5.  
... porque como estoy utilizando SetPixel, que tiene la sintaxis:
Código: Text
  1. COLORREF SetPixel(
  2.     HDC hdc,          // manipulador a contexto de dispositivo
  3.     int X,            // coordenada x del pixel
  4.     int Y,            // coordenada x del pixel
  5.     COLORREF crColor  // color del pixel
  6.    );
  7.  
... el programa no logra mostrar el bmp en pantalla, supongo que sera porque la estructura de COLORREF almacena un valor de 32 bits y en el caso del bmp al tener una matriz de COLORREF la memoria se desborda... lo extraño es que no me sale ningún mensaje de error, simplemente ejecuto el programa y no aparece ni la ventana.

Lo que se me ocurrió entonces fue cambiar COLORREF por unsigned char, o sea:
Código: Text
  1. struct TMatriz{
  2.           unsigned char **coords;
  3.           int maxX,maxY;
  4.        };
  5.  

y ahora lo que esta pasando es que la imagen se carga en la ventana, pero se esta viendo en color rojo y negro, evidentemente estoy manejando mal los colores RGB, no se si existira alguna forma de convertir un unsigned char a COLORREF o si tendre que hacer una función que haga eso.

La parte de obtener el cabezal y la información del cabezal del archivo bmp está funcionando bien, también he intentado con SetPixelV como me sugirió inforsystem y tampoco me dio resultado.

93
Retos / Re: Formato Bmp
« en: Sábado 15 de Julio de 2006, 22:38 »
Citar
verigua en gdi acerca de lock bytes
No encontré mucho sobre lock bytes, pero por lo poco que vi y entendí  :(  me parece que  :think:  ¿es para trabajar con DirectX?

Citar
http://winapi.conclase.net/
Excelente página!!!... es con la que vengo aprendiendo desde el principio del reto ya que está todo muy bien explicado.

Y ya encontré una función similar a PutPixel  :jumpie: , en GDI se llama SetPixel y su sintaxis es:
Código: Text
  1. COLORREF SetPixel(
  2.     HDC hdc,          // manipulador a contexto de dispositivo
  3.     int X,            // coordenada x del pixel
  4.     int Y,            // coordenada y del pixel
  5.     COLORREF crColor  // color del pixel
  6.    );
  7.  

Aún no la he probado (falta de tiempo), pero creo que funcionará  :rolleyes:

94
Retos / Re: Formato Bmp
« en: Viernes 14 de Julio de 2006, 03:51 »
Citar
usar GDI es suicidio scream.gif
No, es broma, tan dificil.
Si, es un suicidio :( , de alguna manera ya lo había captado tal vez de forma subliminal mientras buscaba info en internet :scream:

Hasta ahora no encuentro nada parecido al (maravilloso) putpixel(x,y,color) de Borland para DOS, que exista en GDI, solo encuentro cosas como LoadImage y LoadBitmap que por lo visto cargan el bitmap automagicamente y no a partir de una matriz de bits...

...y ya estoy empezando a dudar que exista algo como putpixel  :( tampoco estoy seguro de estar cargando correctamente el mapa de bits ya que no tengo forma de mostrarlo en pantalla, asi que si alguien me da algún consejo le estaré muy agradecido  :rolleyes:

95
Retos / Re: Formato Bmp
« en: Jueves 13 de Julio de 2006, 23:33 »
Citar
enko, daniel y los demas como van con su reto?

Antes de nada, gracias a todos por la celeridad de la respuesta a mis dudas.

Al igual que Geo, tambien estoy con el GUI, y me esta costando un poco debido a que esta es la primera vez que tengo que hacer un programa con ventanas con C++ (cosa que me entusiasma), estoy intentando con las Win API que es algo nuevo para mi y tengo un montón de dudas, pero antes de hacer preguntas quisiera experimentar un poco más por mi mismo  :comp:

96
Retos / Re: Formato Bmp
« en: Jueves 13 de Julio de 2006, 04:04 »
Estoy en el módulo Dibujo y tengo algunas dudas con la información del cabezal del archivo bmp:
Código: Text
  1. typedef struct {
  2.    unsigned int size;               /* Header size in bytes      */
  3.    int width,height;                /* Width and height of image */
  4.    unsigned short int planes;       /* Number of colour planes   */
  5.    unsigned short int bits;         /* Bits per pixel            */
  6.    unsigned int compression;        /* Compression type          */
  7.    unsigned int imagesize;          /* Image size in bytes       */
  8.    int xresolution,yresolution;     /* Pixels per meter          */
  9.    unsigned int ncolours;           /* Number of colours         */
  10.    unsigned int importantcolours;   /* Important colours         */
  11. } INFOHEADER;
  12.  
No entiendo la diferencia entre ncolours e importantcolours. Hice un programita de prueba que despliega en pantalla todos los datos del bmp y me sale todo coherente (al menos para mi) hasta:

xresolution=0;
yresolution=0;
ncolours=0;
importantcolours=0;

 :blink: ¿eso está bien?... yo pensaba que ncolours almacenaba la cantidad de colores que tiene  el bmp, pero como me sale 0 parecería que es otra cosa.

... ¿y que son los importantcolours?... ¿colores importantes?... ¿está bien que sea 0?

Análoga duda con xresolution e yresolution  :(

97
Retos / Re: Formato Bmp
« en: Sábado 8 de Julio de 2006, 19:38 »
Yo también me apunto al reto  :kicking:

Más que participar me entusiasma aprender algo nuevo, ya que por ejemplo hasta ahora nunca he tenido que realizar una aplicación GUI basada en ventanas.

Los lenguajes que conozco son C/C++, java y VB6, pero me gustaría utilizar C++, he utilizado CygWin y DevCpp, pero siempre en programas tipo consola (no GUI), asi que agradecería que me recomendaran que utilizar para programar con ventanas, supongo que podría ser Allegro, pero antes de sumergirme en esa librería me gustaría conocer vuestra opinión, o sea complejidad de uso y esas cosas.

 :suerte:

98
Pascal / Re: Documentación Sobre El Modo 13h
« en: Viernes 7 de Julio de 2006, 05:20 »
Citar
Ya lo he subido al server de solocodigo
Gracias por ahorrarme el trabajo de subirlo, estaba intentando con el WS_FTP LE y no podía, finalmente descubrí el problema... el firewall de mi winxp tenía bloqueado el puerto 21.

También quiero aclarar que ese tutorial no lo escribí yo, lo encontré hace tiempo en internet en formato html y sin ningun dato sobre el autor, la única modificación que le hice fue convertirlo a pdf, solo eso.

99
Pascal / [Artículo] Modo Gráfico
« en: Jueves 6 de Julio de 2006, 23:31 »
Este modo gráfico no existe en PASCAL ESTANDAR  pues está definido en una unidad de biblioteca (Unidad BGI). La ventaja de este modo radica en la presentación de datos, la cual puede hacerse usando diferentes tipos y tamaños de letras, y dibujando gráficos a través de líneas, círculos, cuadrados, arcos de circunferencia, etc.

Autor: Anónimo

100
Pascal / Re: Documentación Sobre El Modo 13h
« en: Jueves 6 de Julio de 2006, 23:21 »
Tengo un pdf en el que esta explicado (en castellano) como programar en modo gráfico (con la unidad BGI) en  Pascal, el problema es que zipeado pesa 188Kb y no lo puedo subir porque lo máximo permitido es 128Kb. Tal vez te sirve, pero... como hago para subirlo???

Páginas: 1 2 3 [4] 5 6