• Domingo 22 de Diciembre de 2024, 17:29

Autor Tema:  Formato Bmp  (Leído 60777 veces)

senzao18

  • Miembro HIPER activo
  • ****
  • Mensajes: 553
    • Ver Perfil
Re: Formato Bmp
« Respuesta #125 en: Jueves 20 de Julio de 2006, 17:50 »
0
Estoy usando VB.Net.

Logre hacerlo con la clase BinaryReader.

Muchas gracias por tu aporte.
---------------------------------------
Erick Aragon Zepeda
Dessarrollo de Aplicaciones .NET
http]
Blog de Articulos
Mi Blog
NoSolocodigo -->

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: Formato Bmp
« Respuesta #126 en: Jueves 20 de Julio de 2006, 17:54 »
0
Cita de: "Geo"
Una cosa, ¿con qué lenguaje estás trabajando :D?
Cita de: "senzao18"
Estoy usando VB.Net.
Jaja, a ver si pongo más atención a los títulos en los nicks :P.
La imaginación es el límite.
Hardware & Software | Mexchip

senzao18

  • Miembro HIPER activo
  • ****
  • Mensajes: 553
    • Ver Perfil
Re: Formato Bmp
« Respuesta #127 en: Jueves 20 de Julio de 2006, 18:17 »
0
Cita de: "Geo"
Cita de: "Geo"
Una cosa, ¿con qué lenguaje estás trabajando :D?
Cita de: "senzao18"
Estoy usando VB.Net.
Jaja, a ver si pongo más atención a los títulos en los nicks :P.
Jajaja pues yo creo que si....

Una preguntilla. Con que imagenes me deberia de fallar el programa ya probe con la de JuanK y una jpg que teniamos que pasar a BMP y salen bien.

JuanK o alguien, En la salida a que te refieres con retroalimentacion cuando la imagen no es del formato especificado?
---------------------------------------
Erick Aragon Zepeda
Dessarrollo de Aplicaciones .NET
http]
Blog de Articulos
Mi Blog
NoSolocodigo -->

senzao18

  • Miembro HIPER activo
  • ****
  • Mensajes: 553
    • Ver Perfil
Re: Formato Bmp
« Respuesta #128 en: Jueves 20 de Julio de 2006, 21:27 »
0
Pues ya lo envie JuanK espero esté bien  :P  :whistling:
---------------------------------------
Erick Aragon Zepeda
Dessarrollo de Aplicaciones .NET
http]
Blog de Articulos
Mi Blog
NoSolocodigo -->

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Formato Bmp
« Respuesta #129 en: Jueves 20 de Julio de 2006, 21:29 »
0
sele debe informar al usuario, eso es retroalimentacion.

Por ejemplo: si no es una ext bmp se le debe infromar o si el identificador no corresponde a un bmp tambien.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Nagisa

  • Miembro MUY activo
  • ***
  • Mensajes: 119
  • Nacionalidad: es
    • Ver Perfil
Re: Formato Bmp
« Respuesta #130 en: Viernes 21 de Julio de 2006, 18:43 »
0
Cita de: "JuanK"
Cita de: "Nagisa"

De hecho al final lo lei todo de una vez... A mi tambien me parecio mas optima una sola peticion de lectura :D

Saludos!
Pero aun no me has enviado tus fuentes actualizados.
Si, son los que te mande...
   

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Formato Bmp
« Respuesta #131 en: Sábado 22 de Julio de 2006, 19:52 »
0
Cita de: Nagisa,Julio 21, 2006 11:43 am
Pero aun no me has enviado tus fuentes actualizados.
Si, son los que te mande... [/QUOTE]
Ok, ya lo recibi.

Hasta el momento he recibido los programas de:

Nagisa
Diodo
Enko
Geo
Zenzao18

Juank  :smartass:

Aparentemente solo falta Danielo amenos que alguien mas confirme y terminamos.

Ya cada cual sabe las debilidades y fortalezas de sus programas, asi que si desean hacer algun ajuste final, pueden hacerlo entes de que entregue Daniel, ya que en ese momento se cierra el reto.

 :hola:
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Danielo

  • Miembro activo
  • **
  • Mensajes: 69
    • Ver Perfil
Re: Formato Bmp
« Respuesta #132 en: Sábado 22 de Julio de 2006, 21:16 »
0
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  :(
Recuerda siempre que eres único... Exactamente igual que todos los demás.
No existen frases de seis palabras.
Seamos realistas. Busquemos lo imposible.
Lo difícil tarda un poco en resolverse, lo imposible un poco más.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Formato Bmp
« Respuesta #133 en: Sábado 22 de Julio de 2006, 22:19 »
0
para una solucion mas limpia yo tendria que ver mejor tu codigo... y hace rato que no hago nada con la win32  Bored API.

pero por el momento, porque no usas una variable global? :smartass:
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: Formato Bmp
« Respuesta #134 en: Domingo 23 de Julio de 2006, 05:26 »
0
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).
La imaginación es el límite.
Hardware & Software | Mexchip

Danielo

  • Miembro activo
  • **
  • Mensajes: 69
    • Ver Perfil
Re: Formato Bmp
« Respuesta #135 en: Lunes 24 de Julio de 2006, 05:37 »
0
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 "\"
Recuerda siempre que eres único... Exactamente igual que todos los demás.
No existen frases de seis palabras.
Seamos realistas. Busquemos lo imposible.
Lo difícil tarda un poco en resolverse, lo imposible un poco más.

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Formato Bmp
« Respuesta #136 en: Lunes 24 de Julio de 2006, 13:53 »
0
Que yo recuerde, '\' se usa para poner despes los caracteres especiales, pero solo desde el compilador.
Si no me equivoco, si la entrada se hace por teclado, es decir por el usuario, en tiempo de ejecucion, la barra '\' es un caracter m'as.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Formato Bmp
« Respuesta #137 en: Lunes 24 de Julio de 2006, 14:17 »
0
asi es. :comp:
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Formato Bmp
« Respuesta #138 en: Lunes 24 de Julio de 2006, 14:44 »
0
Cita de: "JuanK"
asi es. :comp:
Entonces cual es el problema que tiene Danielo  :blink:

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Formato Bmp
« Respuesta #139 en: Lunes 24 de Julio de 2006, 14:45 »
0
Saludos,
con motivo que Geo me envio su programa con WxWidgets y C++ y me lo paso en versiones linux y windows y funciono OK, me propuse a revisar mejor lo del proyecto Mono asi que trate de ejecutar mis 2 proyectos del reto hechos en C# en un linux ubunto y no me funciono :'(...

la razon resulta que el runtime de mono en el momento solo soporta hasta C# 1.1, el soporte para C# 2.0 aun no esta completo y desde luego mis programas se compilaron con C# 2.0.

Asi que decidi instalar el monodevelop en linux ubuntu , cree un proyecto con mis fuentes de la libreria que hice y la compile...  compilo perfecto!!!  :lol:

Despues procedi a compilar los dos proyectos que hice para el reto, el extra y el de la entrega, el Extra compilo perfecto y funciono perfecto , pero el del reto no porque utiliza  cosas de C# 2.0, pude haber instalado el  gmcs ( el compilador de mono para c# 2.0) pero no porque eso implicaria invertirle mas tiempo, sin embargo vi la documentacion y verifique que el unico error por el que no compilabara ya esta soportado en C# 2.0 para mono.

Lo mas interesante fue que coji mi libreria y el aplicativo compilado en linux ubuntu con C#1.1 y me lleve el ejecutable tal como se genero en linux y me funciono en windosw XP  sin hacerle nada :o  ya que al tener en windows XP instalado el runtime del .net framework 2.0 tengo soporte para todas las versiones anteriores de c# :D.

Hice la prueba invertida, busque en mi pc algunos proyecto antiguos que tenia de C# 1.1 , un hola mundo y otra aplicacion de consola, y me lleve los exe tal cual a linux ubuntu... funcionaron de inmediadto... de maravilla  :lol:
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Danielo

  • Miembro activo
  • **
  • Mensajes: 69
    • Ver Perfil
Re: Formato Bmp
« Respuesta #140 en: Lunes 24 de Julio de 2006, 15:05 »
0
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
Recuerda siempre que eres único... Exactamente igual que todos los demás.
No existen frases de seis palabras.
Seamos realistas. Busquemos lo imposible.
Lo difícil tarda un poco en resolverse, lo imposible un poco más.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Formato Bmp
« Respuesta #141 en: Lunes 24 de Julio de 2006, 15:06 »
0
<_<  Antes de que me digan nada ya mire que ya esta disponible el compilador gms completo , de hecho esta comom opcion por defecto  :huh:

Lo que pasa es que me da mucha pereza este cuento de linux,  para evitarme la fatiga lo habia instalado desde synaptic pero al parecer no todos los paquetes que oferecn estan actualizadod... pero estoy bajando el binario a ver si esta noche hago el deber... lo que si ya esta confirmado es que monodevelop no soportara c# 2.0 hsta que no se libere la version 1.0 de monodevelop lo cual no se cuando sera... :whistling: asi que tendre que compilar por linea de comandos... y con la manotada de referencias que usé  -_-
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Formato Bmp
« Respuesta #142 en: Lunes 24 de Julio de 2006, 15:08 »
0
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  ;)
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Danielo

  • Miembro activo
  • **
  • Mensajes: 69
    • Ver Perfil
Re: Formato Bmp
« Respuesta #143 en: Lunes 24 de Julio de 2006, 16:24 »
0
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 :(
Recuerda siempre que eres único... Exactamente igual que todos los demás.
No existen frases de seis palabras.
Seamos realistas. Busquemos lo imposible.
Lo difícil tarda un poco en resolverse, lo imposible un poco más.

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: Formato Bmp
« Respuesta #144 en: Lunes 24 de Julio de 2006, 17:36 »
0
Cita de: "JuanK"
Saludos,
con motivo que Geo me envio su programa con WxWidgets y C++ y me lo paso en versiones linux y windows y funciono OK, me propuse a revisar mejor lo del proyecto Mono asi que trate de ejecutar mis 2 proyectos del reto hechos en C# en un linux ubunto y no me funciono :'(...

la razon resulta que el runtime de mono en el momento solo soporta hasta C# 1.1, el soporte para C# 2.0 aun no esta completo y desde luego mis programas se compilaron con C# 2.0.

Asi que decidi instalar el monodevelop en linux ubuntu , cree un proyecto con mis fuentes de la libreria que hice y la compile...  compilo perfecto!!!  :lol:

Despues procedi a compilar los dos proyectos que hice para el reto, el extra y el de la entrega, el Extra compilo perfecto y funciono perfecto , pero el del reto no porque utiliza  cosas de C# 2.0, pude haber instalado el  gmcs ( el compilador de mono para c# 2.0) pero no porque eso implicaria invertirle mas tiempo, sin embargo vi la documentacion y verifique que el unico error por el que no compilabara ya esta soportado en C# 2.0 para mono.

Lo mas interesante fue que coji mi libreria y el aplicativo compilado en linux ubuntu con C#1.1 y me lleve el ejecutable tal como se genero en linux y me funciono en windosw XP  sin hacerle nada :o  ya que al tener en windows XP instalado el runtime del .net framework 2.0 tengo soporte para todas las versiones anteriores de c# :D.

Hice la prueba invertida, busque en mi pc algunos proyecto antiguos que tenia de C# 1.1 , un hola mundo y otra aplicacion de consola, y me lleve los exe tal cual a linux ubuntu... funcionaron de inmediadto... de maravilla  :lol:
Jeje, se me olvidó comentarte :P. Cuando me pasaste tu código, lo compilé en Ubuntu instalando monodevelop, la librería compiló sin muchos problemas, el problema fué cuando intenté con tu aplicación principal, chequé documentación y versiones, no recuerdo si era algo con Windows.Forms (y también con las características del 2.0), así que ya no le busqué (te repito, no sé C# aunque poco a poco me voy metiendo :D).

Es muy común que en los repositorios no cuentes con las últimas versiones de algún programa/librería, ya que pasan por un proceso de "candidato->estable", aunque hasta ahora desconozco el proceso real de integración de un paquete a Ubuntu y a Debian.

Lo de tu ejecutable que funciona en Windows, era una de las cosas que me preguntaba pues, cuando compilé con mono, vi que le agrega la extensión .exe a los programas, chequé el formato del ejecutable resultante y dice ¡ejecutable de Windows  :blink:!

Saludos,
JJ (Geo).
La imaginación es el límite.
Hardware & Software | Mexchip

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Formato Bmp
« Respuesta #145 en: Lunes 24 de Julio de 2006, 17:43 »
0
claro asi es,  de hecho corrobore que cualquier ejecutable compilado en una u otra plataforma corre sin problemas en la otra sn necesidad de compilar de nuevo, salvo problemas de version como los que comente.

Incluso mono te permite generar una version de ejecutable para linux, supongo que para poder ejecutarlos como un programa linux normal sin tener que anteponer la palabra mono.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Danielo

  • Miembro activo
  • **
  • Mensajes: 69
    • Ver Perfil
Re: Formato Bmp
« Respuesta #146 en: Miércoles 26 de Julio de 2006, 15:49 »
0
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...  :(
Recuerda siempre que eres único... Exactamente igual que todos los demás.
No existen frases de seis palabras.
Seamos realistas. Busquemos lo imposible.
Lo difícil tarda un poco en resolverse, lo imposible un poco más.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Formato Bmp
« Respuesta #147 en: Miércoles 26 de Julio de 2006, 16:00 »
0
y le has hecho debug paso a paso?

que cadena esta llegando al propceso del bitmap cuando ocurre el llamado?  :rolleyes:
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Formato Bmp
« Respuesta #148 en: Miércoles 26 de Julio de 2006, 16:06 »
0
Ya probaste abriendolo con ofn.lpstrFile?

tambien es conveniente que le hagas un

ZeroMemory (szFile)

o bien un

memset(szFile,'\0',sizeof(szFile))

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.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Danielo

  • Miembro activo
  • **
  • Mensajes: 69
    • Ver Perfil
Re: Formato Bmp
« Respuesta #149 en: Miércoles 26 de Julio de 2006, 23:40 »
0
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.
Recuerda siempre que eres único... Exactamente igual que todos los demás.
No existen frases de seis palabras.
Seamos realistas. Busquemos lo imposible.
Lo difícil tarda un poco en resolverse, lo imposible un poco más.