Asuntos Oficiales > Retos
Formato Bmp
JuanK:
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.
Danielo:
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 --- LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam){OPENFILENAME ofn; // common dialog box structurestatic char szFile[260]; // buffer for file name//HWND hwnd; // owner windowHANDLE hf; // file handle // Initialize OPENFILENAMEZeroMemory(&ofn, sizeof(ofn));ofn.lStructSize = sizeof(OPENFILENAME);//sizeof(ofn);ofn.hwndOwner = hwnd;ofn.lpstrFile = szFile;//// Set lpstrFile[0] to '\0' so that GetOpenFileName does not // use the contents of szFile to initialize itself.////ofn.lpstrFile[0] = '\0';ofn.nMaxFile = sizeof(szFile);ofn.lpstrFilter = "bmp\0*.BMP\0";ofn.nFilterIndex = 1;ofn.lpstrFileTitle = NULL;ofn.nMaxFileTitle = 0;ofn.lpstrInitialDir = NULL;ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; static HINSTANCE hInstance; // inicializo instancia. HDC hDC;PAINTSTRUCT ps; unsigned long x,y; static imagenBMP *bmp;static bool dibujarBMP=false; switch (msg) /* manipulador del mensaje */ { case WM_CREATE: hInstance = ((LPCREATESTRUCT)lParam)->hInstance; break; case WM_PAINT: if (dibujarBMP){ //bmp=CargarBitmapArchivo("E:\\img\\graf1.bmp"); bmp=CargarBitmapArchivo(szFile); hDC = BeginPaint(hwnd, &ps); TextOut(hDC, 10, 300, szFile, strlen(szFile)); for(y =0;y< getAltoBitmap(bmp); y++){ for(x = 0; x < getAnchoBitmap(bmp); x++) SetPixel(hDC,x,y,getPixelMatrizBMP(y,x,bmp)); } EndPaint(hwnd, &ps); dibujarBMP=false; } break; case WM_COMMAND: switch(LOWORD(wParam)) { case CM_ABRIR: // Display the Open dialog box. if (GetOpenFileName(&ofn)==TRUE){ hf = CreateFile(ofn.lpstrFile, GENERIC_READ,0, (LPSECURITY_ATTRIBUTES) NULL,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,(HANDLE) NULL); dibujarBMP=true; MessageBox(hwnd,szFile, "Mensaje de prueba", MB_OK); } break; case CM_SALIR: PostQuitMessage(0); /* envía un mensaje WM_QUIT a la cola de mensajes */ break; } break; case WM_DESTROY: PostQuitMessage(0); /* envía un mensaje WM_QUIT a la cola de mensajes */ break; default: /* para los mensajes de los que no nos ocupamos */ return DefWindowProc(hwnd, msg, wParam, lParam); } return 0;} 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... :(
JuanK:
y le has hecho debug paso a paso?
que cadena esta llegando al propceso del bitmap cuando ocurre el llamado? :rolleyes:
JuanK:
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.
Danielo:
--- Cita de: "JuanK" ---y le has hecho debug paso a paso?
que cadena esta llegando al propceso del bitmap cuando ocurre el llamado? :rolleyes:
--- Fin de la cita ---
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?
--- Fin de la cita ---
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 ---MessageBox(hwnd,szFile, "valor de szFile", MB_OK); bmp=CargarBitmapArchivo(szFile); ... y el message box esta desplegando la ruta correctamente al igual que la etiqueta:
--- Código: Text ---TextOut(hDC, 10, 300, szFile, strlen(szFile)); ... 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 ---ZeroMemory(&szFile, sizeof(szFile)); o memset(szFile,'\0',sizeof(szFile)); 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.
--- Fin de la cita ---
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 ---char cadena[strlen(szFile)]; strncpy(cadena,szFile,strlen(szFile));cadena[strlen(szFile)]='\0'; ... y tampoco :(
Y por el momento eso es todo lo que he intentado, acepto sugerencias, críticas, etc.
Navegación
[#] Página Siguiente
[*] Página Anterior
Ir a la versión completa