Ayuda Graficos

Ayuda Graficos

Postby manuramos » Wed May 10, 2006 6:46 pm

El caso es que tengo un problema de cuidado con la clase TImage y similares (utilizo FW 2.3 y Clipper 5.3 en XP). Pues con Windows 95,98 y WinMe se pueden abrir la mayoría de gráficos/imágenes con nViewLib, pero con XP TImage utiliza nViewl16 (16 bits), en lugar de nViewlib (32 bits), pues pasa por la zona:

if ! ( IsWin95() )
::hBitmap = NViewLibLoad( AllTrim( cBmpFile ), ::nProgress )
else
::hBitmap = NViewLib32( AllTrim( cBmpFile ), ::nProgress )
endif

y como no es W95 pues abre nViewl16.

Puedo forzar la apertura de nViewlib en XP, pero me devuelve handles de más de 10 dígitos, algunos incluso, negativos. He intentado acortarlos con nLowWord(), nHiWord(), con una mezcla de ambos o restando 65536 antes o después de aplicar las funciones. Pero nada de nada. Por fortuna FreeImage me dió la idea de utilizar:

hBmp = nLoWord( WOWHandle16(hBmp, 8 ) ) ¡Y funciona!

El problema es que no lee ni la mitad de gráficos que con nViewl16. Utilizaría nViewl16, lo que pasa es que con esa librería si un gráfico no lo puede leer te saca un mensaje de advertencia. Como mi programa ya tiene su propio sistema de mensajes (muy elaborado) y durante la lectura del albúm muestra un "Espere un momento, Por favor..." pues el programa se queda colgado hasta que se cierre el mensaje de la librería (que casualmente aparece por debajo del mío y no se puede cerrar de forma convencional.).

Y si utilizo nViewlib, no da error si no lee un fichero, pero no lee tantos como con nViewl16. Por ahora he programado una solución de compromiso. Abro lo que puedo con nViewlib y lo demás si no es muy grande con nViewl16 rezando para que no se cuelgue. Será cuestión de advertir al cliente. No deja de ser una solución a medias.

Lo he intentado con FreeImage, pero no se si lo estroy haciendo mal, pero me da la impresión de que FreeImage está pensada para programar en 32 bits. O al menos, con el XP me da error.

Consigo abrir la librería "manualmente" pero después me da error en la librería GDI32.dll (.Por cierto, FreeImage tiene más de 8 carácteres y no se abre en XP con LoadLibrary ni a tiros (a 16 bits).

Si alguién tiene alguna idea, le agradecería la ayuda.

Un saludo
Nos Gusta Programar
manuramos
 
Posts: 219
Joined: Mon Dec 26, 2005 7:25 pm
Location: Jerez de la Frontera (Spain)

Postby Antonio Linares » Thu May 25, 2006 8:10 am

Manu,

Estás tardando en pasarte a 32 bits :)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42099
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby manuramos » Wed Jul 12, 2006 5:08 pm

He conseguido que FreeImage me funcione en 16 bits. En XP utilizo GetDc32() y ReleaseDc32(), y me lee todos lo JPG y PNG pero no me lee los GIF ni los TGA. Para W.Me tengo que utilizar GetDc() y ReleaseDc() normales, con lo que algunos JPG no me los lee.
Al final he hecho una mezcla de un poco de todo (Lo del mensaje anterior + FreeImage) y con XP me lo estrá leyendo todo. Lo del GetDc32() es posible que sea por culpa de la versión USER32.DLL que utilizo. Cuando pueda pruebo con otra y os lo cuento.

Por lo menos, mientras me paso o no a 32 bits el cliente está contento.
Nos Gusta Programar
manuramos
 
Posts: 219
Joined: Mon Dec 26, 2005 7:25 pm
Location: Jerez de la Frontera (Spain)

Postby manuramos » Thu Jul 20, 2006 8:39 pm

Definitivamente, con FW 16 Bits, GetDc32() y ReleasDc32() de USER32.DLL no funcionan correctamente. No es que se corte el programa, pero en mi módulo de carga de fotos no va como debería. Ni copiando el USER32 del XP. Lastima. Seguiré investigando...
Nos Gusta Programar
manuramos
 
Posts: 219
Joined: Mon Dec 26, 2005 7:25 pm
Location: Jerez de la Frontera (Spain)


Return to FiveWin para CA-Clipper

Who is online

Users browsing this forum: No registered users and 34 guests