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

Respuesta
  #1 (permalink)  
Antiguo 22-may-2008, 20:36
Habitual
 
Fecha de Ingreso: marzo-2008
Ubicación: Oviedo
Mensajes: 729
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:
  • Marcado de los pixels quemados siguiendo las ideas proporcionadas por GUI.
  • Presentación de las dos imágenes (del revelado actual y previo) con división horizontal además de división vertical.
Todavía no he hecho lo del centrado del zoom sobre el cursor del mouse. Espero tenerlo pronto, pero quise antes subir una versión funcional del programa.

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.
Responder Citando
Publicidad
  #2 (permalink)  
Antiguo 22-may-2008, 20:43
Habitual
 
Fecha de Ingreso: marzo-2008
Ubicación: Oviedo
Mensajes: 729
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.
Responder Citando
  #3 (permalink)  
Antiguo 22-may-2008, 21:21
Avatar de Carcamal
Habitual
 
Fecha de Ingreso: febrero-2006
Ubicación: Ourense
Mensajes: 229
ariznaf, no sé si te habrás confundido al poner el link de descarga, porque a mí me descarga el perfectRAW.zip versiópn de prueba nº 3 de Manuel.
__________________
______________________
La Web del Carcamal
Responder Citando
  #4 (permalink)  
Antiguo 22-may-2008, 21:45
Habitual
 
Fecha de Ingreso: marzo-2008
Ubicación: Oviedo
Mensajes: 729
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.
Responder Citando
  #5 (permalink)  
Antiguo 22-may-2008, 22:54
Lleva poco por aquí
 
Fecha de Ingreso: agosto-2007
Ubicación: Barcelona
Mensajes: 31
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.
Responder Citando
  #6 (permalink)  
Antiguo 22-may-2008, 23:06
Habitual
 
Fecha de Ingreso: marzo-2008
Ubicación: Oviedo
Mensajes: 729
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é.
Responder Citando
  #7 (permalink)  
Antiguo 22-may-2008, 23:09
Avatar de _GUI_
Gurú Ojodigitalero
 
Fecha de Ingreso: marzo-2006
Ubicación: Madrid (a ratos Alicante)
Mensajes: 6.339
Enviar un mensaje por MSN a _GUI_
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í
Responder Citando
  #8 (permalink)  
Antiguo 22-may-2008, 23:27
Avatar de ManuelLlorens
Habitual
 
Fecha de Ingreso: abril-2008
Ubicación: Madrid
Mensajes: 515
Enviar un mensaje por MSN a ManuelLlorens
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:
  1. El DllNotFountException despista, no es que no la encuentra es que no la puede inicializar. Es el tipo de error que da cuando falla algo en la inicialización de la DLL, ¿haces algo dentro de BOOL APIENTRY DllMain?
  2. Prueba en tu máquina a ejecutar el test.exe en vez de dar a ejecutar en Visual Studio. Es probable que así también te casque a ti y así puedes depurar mejor el error.
A mí me han pasado ambas cosas en las pruebas del revelador, ¡ánimo!

Un saludo:
__________________
Manuel Llorens
Olympus E-510, E-300
Mis fotos
Responder Citando
  #9 (permalink)  
Antiguo 23-may-2008, 00:50
Habitual
 
Fecha de Ingreso: marzo-2008
Ubicación: Oviedo
Mensajes: 729
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.
Responder Citando
  #10 (permalink)  
Antiguo 23-may-2008, 00:50
Avatar de Carcamal
Habitual
 
Fecha de Ingreso: febrero-2006
Ubicación: Ourense
Mensajes: 229
A mi tampoco me va (XP 32). Me da un error similar a los ya indicados ( no puede cargar PerfectImageDLL.dll). Ánimo.
__________________
______________________
La Web del Carcamal
Responder Citando
  #11 (permalink)  
Antiguo 23-may-2008, 00:52
Lleva poco por aquí
 
Fecha de Ingreso: mayo-2008
Ubicación: León
Mensajes: 16
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.
Responder Citando
  #12 (permalink)  
Antiguo 23-may-2008, 00:55
Avatar de ManuelLlorens
Habitual
 
Fecha de Ingreso: abril-2008
Ubicación: Madrid
Mensajes: 515
Enviar un mensaje por MSN a ManuelLlorens
Cita:
Iniciado por ariznaf Ver Mensaje
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.
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:
__________________
Manuel Llorens
Olympus E-510, E-300
Mis fotos

Última edición por ManuelLlorens; 23-may-2008 a las 02:17.
Responder Citando
  #13 (permalink)  
Antiguo 23-may-2008, 01:01
Habitual
 
Fecha de Ingreso: marzo-2008
Ubicación: Oviedo
Mensajes: 729
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.
Responder Citando
  #14 (permalink)  
Antiguo 23-may-2008, 01:09
Avatar de _GUI_
Gurú Ojodigitalero
 
Fecha de Ingreso: marzo-2006
Ubicación: Madrid (a ratos Alicante)
Mensajes: 6.339
Enviar un mensaje por MSN a _GUI_
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í
Responder Citando
  #15 (permalink)  
Antiguo 23-may-2008, 01:09
Avatar de ManuelLlorens
Habitual
 
Fecha de Ingreso: abril-2008
Ubicación: Madrid
Mensajes: 515
Enviar un mensaje por MSN a ManuelLlorens
Cita:
Iniciado por ariznaf Ver Mensaje
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.
¿No estarás calculando igual el extra para 16 y 8 bits? La variable extra se calcula en C# a partir de información que da GDI+, no hay prácticamente cálculo que hacer, y, obviamente, puede no valor 0 (si no no serviría para nada ):

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);
y pasar ptr, img.Width, img.Height y extra al fastdraw. Ten en cuenta que en extra del buffer de salida y el de entrada son distintos, porque el de salida es de 8 bits y el de entrada de 16. Si estás usando imágenes de 16 bits el cálculo de la variable debe tener un * 6 al final, con imágenes de 8 bits debe tener un * 3, ¿no será eso?

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:
__________________
Manuel Llorens
Olympus E-510, E-300
Mis fotos

Última edición por ManuelLlorens; 23-may-2008 a las 15:27.
Responder Citando
  #16 (permalink)  
Antiguo 23-may-2008, 14:23
Habitual
 
Fecha de Ingreso: marzo-2008
Ubicación: Oviedo
Mensajes: 729
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?
No, Manuel, no es que te lo endiñe. He probado test4b (me lo he bajado expresamente) en mi ordenador con mi imagen vertical y se la pega igual que ahora, nada más empezar (bueno en mi ordenador ahora no siempre se la pega, sino que la imagen se va corriendo un poco de una fila a la siguiente. Pero a veces sí se la pega, lo cuál parece indicar un acceso incorrecto a memoria).

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:
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!
En lo que dices me das una pista. Como digo más abajo, seguramente no se deba a si es vertical o no si no a si los pixels en una fila son o no múltiplos de 4.

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.
Responder Citando
  #17 (permalink)  
Antiguo 23-may-2008, 14:35
Habitual
 
Fecha de Ingreso: marzo-2008
Ubicación: Oviedo
Mensajes: 729
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.
Responder Citando
  #18 (permalink)  
Antiguo 23-may-2008, 15:07
Avatar de ManuelLlorens
Habitual
 
Fecha de Ingreso: abril-2008
Ubicación: Madrid
Mensajes: 515
Enviar un mensaje por MSN a ManuelLlorens
Cita:
Iniciado por ariznaf Ver Mensaje
No, Manuel, no es que te lo endiñe. He probado test4b (me lo he bajado expresamente) en mi ordenador con mi imagen vertical
Lo del endiñe lo decía de broma, ya te lo puse. Tu problema no está en que sea vertical u horizonal, sino en las dimensiones de la imagen.

<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:
Iniciado por ariznaf Ver Mensaje
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.
Mira este diagrama:



Stride no mide el ancho de la imagen (que se mide en píxels) sino el ancho del Bitmap de GDI+ en bytes. Extra debería ser la diferencia entre stride y el ancho de la imagen en bytes y se calcula por tanto así:
Código:
extra = data.Stride - img.Width*6; // para 16 bits
extra = data.Stride - img.Width*3; // para 8 bits
Por si acaso, ayer te puse esto otro:

Código:
extra = data.Stride - data.Width*6; // para 16 bits
extra = data.Stride - data.Width*3; // para 8 bits
Creo que es lo mismo, pero prueba a cambiar data por img por si acaso data.Width ya viniera en bytes en vez de en pixels.

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:
Iniciado por ariznaf Ver Mensaje
Seguramente esto sea porque al ser vertical la imagen el número de pixels por fila no es múltiplo de 4
Hombre, no tiene nada que ver lo uno con lo otro. Una imagen de 10x40 es vertical y si es de 16 bits mide en bytes 60x40 (el ancho por tres canales de 2 bytes cada uno = 10*3*2 = 60), con lo que extra valdrá 0, dado que 60 es múltiplo de 4.

Cita:
Iniciado por ariznaf Ver Mensaje
Al valer 2 la subrutina FastDraw no funciona bien.
Es posible que falle con dimensiones impares, lo miraré.

Si quieres leer más del tema te recomiendo este enlace.

Un saludo:
__________________
Manuel Llorens
Olympus E-510, E-300
Mis fotos

Última edición por ManuelLlorens; 23-may-2008 a las 17:11.
Responder Citando
  #19 (permalink)  
Antiguo 23-may-2008, 15:11
Avatar de ManuelLlorens
Habitual
 
Fecha de Ingreso: abril-2008
Ubicación: Madrid
Mensajes: 515
Enviar un mensaje por MSN a ManuelLlorens
Cita:
Iniciado por ariznaf Ver Mensaje
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?
Esas imágenes fallan en DCRAW_Init() y ahí no hay ningún cálculo con stride. Además, todos los RAWs tienen dimesiones pares y como son de 16 bits ningún RAW tiene un ancho de fila en bytes que no sea múltiplo de 4, que es lo que importa.

Un saludo:
__________________
Manuel Llorens
Olympus E-510, E-300
Mis fotos

Última edición por ManuelLlorens; 23-may-2008 a las 17:12.
Responder Citando
  #20 (permalink)  
Antiguo 23-may-2008, 15:49
Avatar de ManuelLlorens
Habitual
 
Fecha de Ingreso: abril-2008
Ubicación: Madrid
Mensajes: 515
Enviar un mensaje por MSN a ManuelLlorens
Cita:
Iniciado por ariznaf Ver Mensaje
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).
Es lo que pasa cuando la compilas con VC++ en vez de con MinGW. Compila desde DEV-C++ y verás como se arregla. Eso, lo de las imágenes impares ya te lo miro yo y tú así puedes seguir avanzando.

Un saludo:
__________________
Manuel Llorens
Olympus E-510, E-300
Mis fotos
Responder Citando
Respuesta

Marcadores