Buff. Yo he estado mirando y es tremendamente compleja, al menos para mi oxidado C++. La verdad es que el C++ y yo nunca nos hemos gustado, a mí él me cae mal, y yo a él le caigo peor. En serio, me parece super improductivo trabajar en C++. Yo en los tiempos pre .NET trabajaba mucho en VB6/ASP los GUIs y tiraba de COM/ATLs en C++. Sin duda alguna el GUI en C#.
Sí, la verdad es que C++ es muy tiquismiquis con el acceso a la memoria y la liberación de memoria. Pero si queremos reaprovechar librerías (como la de Adobe) no quedara más remedio que hacer un "stub" en C++ y que presente una interface C# para hacer justo lo que se necesite (como pasarle al "stub" los parámetros de revelado y que éste los guarde en los metadatos xmp).
Yo también creo que es mejor huir lo más posible de C++.
Yo ya me había decantado por C#, en el que tengo experiencia. Lo malo es que _muy_ lento trabajando con TIFF, incluso con secciones unsafe. Estaba empezando un GUI con C# y direct-x, pero me echa para atrás que al usar direct-x me quedo sin poder portar a Linux. Así que la alternativa es usar una librería de código abierto para TIFF en C/C++ e integrarla en C#. Lo tengo en la lista de cosas a mirar.
Sí, si queremos que pite en Linux (y creo que se le debe a Coffin y la comunidad Linux, aunque yo no lo uso) no se podrá usar direct-x.
¿Qué ótras alternativas hay como librería para manejo de bitmaps? ¿OpenGL podría servir? Está más orientada a representación 3D, pero maneja texturas y por tanto bitmaps. No sé si la funcionalidad de Open GL puede ser suficiente.
Para C# sólo con VS, pero echo un vistazo ahora.
Yo también utilizé sólo VS. Pero buscando alternativas gratuitas encontré lo de #Develop. El problema está en que sólo compila C# y por tanto no se podría utilizar para compilar el código C++ ni C.
Sé de otras alternativas como MonoDevelop y Eclipse con un plugin para C# y Mono, pero no los he utilizado.
Lo que no tengo claro y me anda dando vueltas en la cabeza es si integrar DCRAW en una DLL (o utilizar alguna que ya hay) o dejarlo en un EXE. Lo malo de lo primero es que habría que estar programando cada vez que Coffin actualice (aunque ya habrá que actualizar la versión que hemos modificado de DCRAW, pero los cambios son mucho menores) y eso puede matar el proyecto. La segunda opción nos da un resultado más lento, pero más versátil. Para ello voy a añadir a DCRAW la opción de revelar solo un trozo de la imagen. Aún así también quiero mirar si puedo crear una cutre librería (aunque sea estática) con DCRAW sin tocar el código de Coffin, solo añadiendo algunas funciones.
Eso habrá que analizarlo con detenimiento, pues creo que será crucial para el éxito del proyecto y también lo puede complicar bastante (por el tema de mantenimiento del código que mencionas).
- Opción DLL: más que una DLL creo que lo suyo sería crear un componente .NET en C++ que exponga los métodos de acceso a los parámetros de revelado y los métodos para revelar el fichero y devolver un bitmap con la imagen revelada. Primero se llama a las funciones para establecer los parámetros de revelado y el fichero RAW a procesar y luego se llama al método revelar que devolvería el bitmap.
De esta forma el código se aislaría lo más posible en ese componente que sería lo único a tocar (o casi) de cara a desarrollos futuros de DCRAW.
- Inconvenientes: está claro, hay que retocar algo cada vez que aparezca una versión de DCRaw (aunque esto ya sucede ahora con las modificaciones hechas a DCRaw).
- Ventajas: integración en el código del programa. Además no sería necesario crear ficheros TIFF externos y los resultados de tocar un valor del revelador se podrían ver de forma inmediata, y no habría que esperar a que el usuario le de al botón revelar para generar el TIFF, leerlo y presentarlo en pantalla.
- Opción Ejecutble externo: eso sería como está ahora.
- Inconvenientes: hay que lanzar un ejecutable externo, pasarle los parámetros (con la limitación de caracteres de la linea de comandos) esperar a que genere el TIFF y volver a cargarlo. Mayor gasto de memoria y recursos y mucho más lento (no se podrían apreciar los efectos de los parámetros de revelado en tiempo real).
- Ventajas: más fácil de mantener el código, al no tener que retocar nada cada vez que aparezca una versión nueva (bueno, algo sí para incorporar los cambios que hicistéis).
Para no tener que generar un fichero TIFF en el disco y volver a leerlo, se pueden crear pipes para leer la salida estándar del programa (que tiene una opción para escribir en stdout) o bien utilizar pipes con nombre.
Bueno ya nos dirás a qué conclusiones llegas...
Saludos
Marcadores