OJODIGITAL |
|
|
|
| perfectRAW/perfectBLEND Foro para tratar todo lo relacionado con estos dos programas basados en DCRaw para el revelado de imágenes RAW y el blending de imágenes para aumentar su rango dinámico |
![]() |
|
|||
|
Probar perfectRAW (módulo interfaz)
Bueno por fin he conseguido crear un nuevo test de la interface (GUI) del programa, después de la remodelización y de que los algoritmos fastDraw para realizar el escalado y el marcado de pixels quemados partiendo de un buffer de 16bits en vez de 8.
Básicamente tiene la misma funcionalidad que el último test que puso Manuel, sólo que hubo que reconvertir los algoritmos y de paso he hecho un poco de limpieza en dichos algoritmos y en el control PerfectView. Al final ha sido una remodelación bastante profunda a nivel de código,me he tenido que empapar de los algoritmos de escalado de FastDraw programados por Manuel, y ahora más o menos me he enterado. ![]() En cuanto a nueva funcionalidad, únicamente he añadido dos cosas:
Descárgate el programa PerfectRAW GUI Test v0.6 Esta versión no funcionaba en Win32 por problemas de compilación con VC++. Prueba la versión 0.7 compilada con MingWin en http://www.ojodigital.com/prawpblend...tRawTest07.zip Sólo tenéis que descomprimir el archivo y ejecutar test.exe. He incluido un fichero de prueba imgPrueba.tif. Al abrir te pedira escoger un fichero. Asegúrate que sea un fihero tiff de 16 bits. Hay un botón abrir para seleccionar un nuevo fichero. He subido el código al svn (bajo PruebasConcepto/PerfectControls). Constituye la versión 61. Reportar los errores que encontréis. Última edición por ariznaf; 23-may-2008 a las 23:53. |
| Publicidad |
|
|||
|
Yo ya he encontrado un error:
El programa no funciona adecuadamente con imágenes en vertical. Creo que esto se debe a algún bug en las subrutinas FastDraw y que ya estaba presente en la versión de Manuel(al abrir un archivo con imagen vertical se la pega). Lo que la versión de Manuel siempre abría el mismo fichero (salón.tif) que era horizontal. Si probáis a copiar un fichero en vertical con ese nombre, se colgará. Abrá que investigar la causa. |
|
|||
|
Tienes razón, disculpa. Ya está corregido.
Buff son casi 34MB de descarga ... es que incluí un tiff de prueba por si no teníais uno a mano. Sólo el tiff solo son 36MB ![]() Para las próximas veces no pondré ningún TIFF. Última edición por ariznaf; 22-may-2008 a las 21:48. |
|
|||
|
Te paso los bug no demasiado importantes que he encontrado:
El boton de 'abrir' al redimensionar la ventan no se mueve Si abres una imagen quando tienes la ventana a pantalla completa, no se presentan las imagenes hasta que no mueves la rueda del zoom o desplazas la imagn que no ves. Por lo demas tiene bastante buena pinta. |
|
|||
|
Tienes razón, se me olvidó anclar el botón a la parte inferior.
Es que el botón abrir lo puse aprisa y corriendo a última hora. Lo de la imagen... debió de olvidárseme refrescar la ventana al abrir el fichero. Lo comprobaré. |
|
||||
|
Me casca
(Vista 32)Consulte el final de este mensaje para obtener más detalles sobre cómo invocar a la depuración Just-In-Time (JIT) en lugar de a este cuadro de diálogo. ************** Texto de la excepción ************** System.DllNotFoundException: No se puede cargar el archivo DLL 'PerfectImageDLL.dll': Error al iniciar la aplicación; la configuración en paralelo no es correcta. Consulte el registro de eventos de la aplicación para obtener más detalles. (Excepción de HRESULT: 0x800736B1) en PerfectControls.PerfectView.FastDrawImage16(Byte* outputImg, UInt16* inputImg, Int32 outImgWidth, Int32 outImgHeight, Int32 inImgWidth, Int32 inImgHeight, Int32 outImgRowPadding, Int32 inImgRowPadding, Int32 x, Int32 y, Single z, Byte fillColor) en PerfectControls.PerfectView.OnPaint(PaintEventArgs pe) en System.Windows.Forms.Control.PaintWithErrorHandlin g(PaintEventArgs e, Int16 layer, Boolean disposeEventArgs) en System.Windows.Forms.Control.WmPaint(Message& m) en System.Windows.Forms.Control.WndProc(Message& m) en System.Windows.Forms.Control.ControlNativeWindow.O nMessage(Message& m) en System.Windows.Forms.Control.ControlNativeWindow.W ndProc(Message& m) en System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) ************** Ensamblados cargados ************** mscorlib Versión del ensamblado: 2.0.0.0 Versión Win32: 2.0.50727.312 (rtmLHS.050727-3100) Código base: file:///C:/Windows/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll ---------------------------------------- test Versión del ensamblado: 1.0.0.0 Versión Win32: 1.0.0.0 Código base: file:///C:/perfectRAW/PerfectRawTest06/test.exe ---------------------------------------- System.Windows.Forms Versión del ensamblado: 2.0.0.0 Versión Win32: 2.0.50727.312 (rtmLHS.050727-3100) Código base: file:///C:/Windows/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll ---------------------------------------- System Versión del ensamblado: 2.0.0.0 Versión Win32: 2.0.50727.312 (rtmLHS.050727-3100) Código base: file:///C:/Windows/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll ---------------------------------------- System.Drawing Versión del ensamblado: 2.0.0.0 Versión Win32: 2.0.50727.312 (rtmLHS.050727-3100) Código base: file:///C:/Windows/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll ---------------------------------------- PerfectControls Versión del ensamblado: 1.0.3064.32413 Versión Win32: 1.0.0.0 Código base: file:///C:/perfectRAW/PerfectRawTest06/PerfectControls.DLL ---------------------------------------- Accessibility Versión del ensamblado: 2.0.0.0 Versión Win32: 2.0.50727.312 (rtmLHS.050727-3100) Código base: file:///C:/Windows/assembly/GAC_MSIL/Accessibility/2.0.0.0__b03f5f7f11d50a3a/Accessibility.dll ---------------------------------------- mscorlib.resources Versión del ensamblado: 2.0.0.0 Versión Win32: 2.0.50727.312 (rtmLHS.050727-3100) Código base: file:///C:/Windows/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll ---------------------------------------- System.Windows.Forms.resources Versión del ensamblado: 2.0.0.0 Versión Win32: 2.0.50727.312 (rtmLHS.050727-3100) Código base: file:///C:/Windows/assembly/GAC_MSIL/System.Windows.Forms.resources/2.0.0.0_es_b77a5c561934e089/System.Windows.Forms.resources.dll ---------------------------------------- ************** Depuración JIT ************** Para habilitar la depuración Just In Time (JIT), el archivo de configuración de esta aplicación o equipo (machine.config) debe tener el valor jitDebugging establecido en la sección system.windows.forms. La aplicación también se debe compilar con la depuración habilitada Por ejemplo: <configuration> <system.windows.forms jitDebugging="true" /> </configuration> Cuando esté habilitada la depuración JIT, cualquier excepción no controlada se enviará al depurador JIT registrado en el equipo en lugar de controlarlo mediante el cuadro de diálogo.
__________________
"En ocasiones veo halos." Canon EOS 350D | EOS 300 | 10-22 | 24-70 f2.8L | 70-200 f4L | 300 f4L IS http://www.guillermoluijk.com para suscribirte pulsa aquí |
|
||||
|
También me casca (por cierto, no hace falta que distribuyas el test.vshost.exe). Ayer compile lo que tenías subido a SVN e iba bien, debe ser algo que has modificado recientemente. El error, un pelín distinto al que le da a _GUI_:
System.DllNotFoundException: No se puede cargar el archivo DLL 'PerfectImageDLL.dll': No se pudo iniciar la aplicación porque su configuración es incorrecta. Reinstalar la aplicación puede solucionar el problema. (Excepción de HRESULT: 0x800736B1) en PerfectControls.PerfectView.FastDrawImage16VSplit( Byte* outputImg, UInt16* inputLeftImg, UInt16* inputRightImg, Int32 outImgWidth, Int32 outImgHeight, Int32 inImgWidth, Int32 inImgHeight, Int32 outImgRowPadding, Int32 inImgRowPadding, Int32 x, Int32 y, Single z, Byte fillColor) Posibles pistas que se me ocurren, por si te pueden ayudar:
![]() Un saludo: |
|
|||
|
Mmmm... esto es más raro que un perro verde.
Lo de GUI todavía lo podría entender... He localizado algunos problemas en el código de FastDraw. El manejo de la variable extra no parece que se haga del todo bien (o bien hay algún problema en su cálculo). Cuando se carga una imagen vertical por ejemplo, la variable extra ya no vale 0 y entonces el programa no funciona bien. Seguro que hay algún cálculo mal hecho en la parte del FastDraw ... Cuando vale 0 no hay problema. En cuanto a lo tuyo, Manuel.... pues no sé que decirte. Dice que no la puede cargar, pero no porque no la encuentre sino por configuración incorrecta. Es lo que me pasaba a ni cuando intentaba cargar la dll en Vista 64 (cuando el programa estaba configurado como anycpu). En cuanto a lo que comentas: 1.- No, no hago nada en ddlmain. No lo he tocado. 2.- Ya lo probé antes de mandarlo y me funciona (lo he vuelto a probar). A Eduardo también, aunque tiene los errores que él comentó. Bueno lo miraré a ver si se me ocurre algo... Última edición por ariznaf; 23-may-2008 a las 00:53. |
|
||||
|
A mi tampoco me va (XP 32). Me da un error similar a los ya indicados ( no puede cargar PerfectImageDLL.dll). Ánimo.
|
|
|||
|
Acabo de bajar el test, y al ir a arrancar test.exe ha petado con el mensaje(La aplicacion nose ha podido inicializar correctamente (0xc0000135).Haga click en Aceptar para terminar la aplicacion.)
Por si sirve lo he ido a ejecutar en win XPSP2. |
|
||||
|
Cita:
Pero ¡qué morro tío! ![]() ![]() ![]() ¡A mí no me endiñes tus bugs! Si cargas un archivo vertical en las dos últimas pruebas que yo subí (Test4b y GUI16) ambas funcionan perfectamente ![]() ![]() ![]() ![]() . ¿Quieres que ponga un pantallazo? ![]() Además, no tiene ninguna lógica, porque no hay nada en el código que distinga el caso de una imagen vertical de una horizontal. Debe ser otra cosa. Tal vez pueda fallar algo con imágenes muy grandes, eso no lo sé. ¡A saber lo qué le habrás hecho a mi pobre código! ![]() ![]() ![]() ![]() ¿Qué es lo que te falla? ¿La división de pantalla con una imagen vertical a 16 bits? En SVN no está el código de perfectImage.dll, si quieres que le eche un vistazo pásamelo por mail, a lo mejor yo veo algo. Y no se te ocurra mosquearte, ¡eh!, que estoy de broma, ¡Ánimo! El momento más duro (lo digo por experiencia en este proyecto) es cuando subes tú todo ilusionado algo que a ti te funciona en casa (¡por fin!) y no le chuta a la gente. Te sientes medio ridículo, medio tonto, medio inútil. Pero lo malo pasa pronto; lo arreglas, lo subes, funciona y todo el mundo te dice que va bien y entonces te sientes genial y ha merecido la pena el esfuerzo. Fíjate en todas las pruebas que he subido y yo y han tenido fallos, creo que salvo un par todas las demás han cascado de un modo u otro ![]() ![]() . Pero así es como tenemos que identificar los bugs y corregirlos en este proyecto, porque necesitamos probar el programa en otros sistemas y para eso hay que soltar pruebas ejecutables y ver qué dicen los demás. Sería peor que quedaran bugs escondidos y empezaran a aparecer cuando el proyecto estuviera más avanzado. Sin ir más lejos, la última prueba que he subido del revelador tiene un fallo que ha encontrado _GUI_ (los pilla todos el tío ).Un saludo: Última edición por ManuelLlorens; 23-may-2008 a las 02:17. |
|
|||
|
Creo que el problema tiene que ver con la configuración del proyecto del compilador.
En el programa principal tenía activado x86 como plataforma, pero en la librería PerfectControls tenía AnyCpu... Acordaros que la historia venía por la imposibilidad de Vista 64 de cargar dll de 32 bits, y había que marcarlo como x86 para conseguir que se ejecutara en la máquina de 32 bits. Me imagino que al olvidárseme poner la compilación para x86 venga de ahí el problema. Lo más curioso es que en Vista 64 funciona. Estos de Microsoft.... Todavía no me aclaro muy bien con la diferencia entre Plataforma y Destino de la plataforma. La verdad es que es un lío tremendo. Bueno a ver si lo puedo arreglar. |
|
||||
|
joe desde luego lo de las distintas plataformas es una pesadilla. venga, ánimo!
__________________
"En ocasiones veo halos." Canon EOS 350D | EOS 300 | 10-22 | 24-70 f2.8L | 70-200 f4L | 300 f4L IS http://www.guillermoluijk.com para suscribirte pulsa aquí |
|
||||
|
Cita:
):Una vez cargada la imagen en img, solo hay que hacer esto: Código:
data = img.LockBits(new Rectangle(0, 0, img.Width, img.Height), ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format48bppRgb); extra = data.Stride - data.Width * 6; ptr = (byte*)(data.Scan0); No tiene nada que ver con que la imagen sea vertical u horizontal, sino con que sus dimensiones (añado: en bytes) sean o no múltiplos de 4. En GDI+ todos los Bitmaps tienen internamente dimensiones múltiplo de 4 y se rellenan con bytes a cero si se cargan imágenes de otras dimensiones. La variable extra dice cuantos bytes sobran al final de cada línea de la imagen (hasta el siguiente múltiplo de 4), en Intenet hay artículos sobre la estructura interna de los Bitmaps de GDI+. Un saludo: Última edición por ManuelLlorens; 23-may-2008 a las 15:27. |
|
|||
|
Cita:
Te puedo asegurar que primero creía que era algo que había tocado en el código yo... pero lo he probado y también casca. Yo he procurado no tocar mucho (cambiado algún nombre de variable y desdoblado un for para evitar la comprobación if(i<ww) desdoblando en dos for de i=0 a i<wwy de i=hh a i<w, poco más (en el FastDrawVertical). En Horizontal sí que lo he tenido que hacer todo y el vertical tocar yo un poquito porque estaba en 8 bits. Cita:
Manuel: el problema está en que en las imágenes horizontales extra sale 0 (porque el stride de la imagen completa devuelve lo que ocupa una fila completa de la imagen). En mi imagen vertical extra vale 2. Seguramente esto sea porque al ser vertical la imagen el número de pixels por fila no es múltiplo de 4 Al valer 2 la subrutina FastDraw no funciona bien. Eso pueden ser dos cosas: 1.- Hay algo mal interpretado en lo que significa el Stride de una imagen. 2.- Hay algo mal en el código de FastDraw y los cálculos que hace con las variables extra y extra2 para saltar en el buffer de una fila a la siguiente. Parece más probable que sea lo segundo, puesto que el cálculo de extra es muy sencillo (a no ser que estemos malinterpretando lo que es el Stride, que no creo). En mi pantalla, tal y como está ahora, con la imagen vertical cada fila se va corriendo con respecto a la anterior, aunque a veces se la pega (la corrección de gamma puesta en el código también se la pegaba). Creo que el Stride también se usa para calcular el desplazamiento a hacer de una fila a la siguiente cuando no bloqueamos los pixels de toda la imagen, sino un área más pequeña. Pero en nuestro caso la bloqueamos toda, por lo que eso no importaría. Tendré que revisarlo a fondo. Última edición por ariznaf; 23-may-2008 a las 14:37. |
|
|||
|
Por cierto... ¿recuerdas haber comentado que perfectRaw fallaba con algunas imágenes?
¿No serán precisamente imágenes de cámaras en los que el número de pixels por fila no es un múltiplo de 4? Habría que comprobarlo, en las imágenes que fallaba (si es que tenéis claro en cuáles era) comprobar si el número de pixels en la dirección horizontal de la imagen es o no un múltiplo de 4, y si las que revelaba bien, son por el contrario aquéllas en las que ES multiplo de 4. |
|
||||
|
Cita:
<Manuel>: Comprobado, ariznaf: se la pega cuando el ancho de la imagen es impar (cosa por cierto que nunca pasará en perfectRAW) y extra por tanto no vale 0. Aún así, debería funcionar bien. Si quieres mándame el código de FastDraw (o mejor aún, súbelo a SVN) y lo miro, es que yo aquí solo tengo las versiones de 8 bits, de las de 16 no tengo copia... aunque bueno, como en las de 8 bits también se la pegaba puedo ir mirándolo con lo que hay en SVN ahora, que es de 8 bits. Más abajo he puesto unas pruebas que puedes hacer para aislar el error. Te dejo lo que sigue como documentación para el proyecto. De momento trabaja con imágenes de ancho par y listo, así puedes seguir avanzando. Cita:
![]() Código:
extra = data.Stride - img.Width*6; // para 16 bits extra = data.Stride - img.Width*3; // para 8 bits Código:
extra = data.Stride - data.Width*6; // para 16 bits extra = data.Stride - data.Width*3; // para 8 bits Luego en fastdraw para saltar de una línea a la siguiente hay que sumar al puntero el ancho en píxels multiplicado por 3 ó 6 según el buffer + extra sin multiplicar por nada. Voy a revisar eso. Cita:
Es posible que falle con dimensiones impares, lo miraré. Si quieres leer más del tema te recomiendo este enlace. Un saludo: Última edición por ManuelLlorens; 23-may-2008 a las 17:11. |
|
||||
|
Cita:
Un saludo: Última edición por ManuelLlorens; 23-may-2008 a las 17:12. |
|
||||
|
Cita:
Un saludo: |
![]() |
| Marcadores |