Resultados 1 al 46 de 46
  1. #1
    Avatar de ariznaf
    ariznaf no ha iniciado sesión Eterno aprendiz...
    Fecha de ingreso
    21 Mar, 08
    Ubicación
    Oviedo
    Mensajes
    7,238

    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/05/2008 a las 22:53

  2. #2
    Avatar de ariznaf
    ariznaf no ha iniciado sesión Eterno aprendiz...
    Fecha de ingreso
    21 Mar, 08
    Ubicación
    Oviedo
    Mensajes
    7,238
    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.

  3. #3
    Avatar de Carcamal
    Carcamal no ha iniciado sesión Habitual
    Fecha de ingreso
    13 Feb, 06
    Ubicación
    Ourense
    Mensajes
    393
    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

  4. #4
    Avatar de ariznaf
    ariznaf no ha iniciado sesión Eterno aprendiz...
    Fecha de ingreso
    21 Mar, 08
    Ubicación
    Oviedo
    Mensajes
    7,238
    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/05/2008 a las 20:48

  5. #5
    Eduardo Cañadas no ha iniciado sesión Lleva poco por aquí
    Fecha de ingreso
    27 Aug, 07
    Ubicación
    Barcelona
    Mensajes
    34
    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.

  6. #6
    Avatar de ariznaf
    ariznaf no ha iniciado sesión Eterno aprendiz...
    Fecha de ingreso
    21 Mar, 08
    Ubicación
    Oviedo
    Mensajes
    7,238
    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é.

  7. #7
    Avatar de Guillermo Luijk
    Guillermo Luijk no ha iniciado sesión RAW RAW la botella de RAW
    Fecha de ingreso
    07 Mar, 06
    Ubicación
    Madrid (a ratos Alicante)
    Mensajes
    8,383
    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."

    http://www.guillermoluijk.com para suscribirte haz clic aquí
    Último contenido: PARA QUÉ SIRVE EL RANGO DINÁMICO?

  8. #8
    Avatar de ManuelLlorens
    ManuelLlorens no ha iniciado sesión Enganchad@ a los foros
    Fecha de ingreso
    30 Apr, 08
    Ubicación
    Madrid
    Mensajes
    883
    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-P1, E-510, E-300
    www.rawness.es

  9. #9
    Avatar de ariznaf
    ariznaf no ha iniciado sesión Eterno aprendiz...
    Fecha de ingreso
    21 Mar, 08
    Ubicación
    Oviedo
    Mensajes
    7,238
    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; 22/05/2008 a las 23:53

  10. #10
    Avatar de Carcamal
    Carcamal no ha iniciado sesión Habitual
    Fecha de ingreso
    13 Feb, 06
    Ubicación
    Ourense
    Mensajes
    393
    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

  11. #11
    Cazurro no ha iniciado sesión Lleva poco por aquí
    Fecha de ingreso
    02 May, 08
    Ubicación
    León
    Mensajes
    58
    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.

  12. #12
    Avatar de ManuelLlorens
    ManuelLlorens no ha iniciado sesión Enganchad@ a los foros
    Fecha de ingreso
    30 Apr, 08
    Ubicación
    Madrid
    Mensajes
    883
    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:
    Última edición por ManuelLlorens; 23/05/2008 a las 01:17
    Manuel Llorens

    Olympus E-P1, E-510, E-300
    www.rawness.es

  13. #13
    Avatar de ariznaf
    ariznaf no ha iniciado sesión Eterno aprendiz...
    Fecha de ingreso
    21 Mar, 08
    Ubicación
    Oviedo
    Mensajes
    7,238
    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.

  14. #14
    Avatar de Guillermo Luijk
    Guillermo Luijk no ha iniciado sesión RAW RAW la botella de RAW
    Fecha de ingreso
    07 Mar, 06
    Ubicación
    Madrid (a ratos Alicante)
    Mensajes
    8,383
    joe desde luego lo de las distintas plataformas es una pesadilla. venga, ánimo!
    "En ocasiones veo halos."

    http://www.guillermoluijk.com para suscribirte haz clic aquí
    Último contenido: PARA QUÉ SIRVE EL RANGO DINÁMICO?

  15. #15
    Avatar de ManuelLlorens
    ManuelLlorens no ha iniciado sesión Enganchad@ a los foros
    Fecha de ingreso
    30 Apr, 08
    Ubicación
    Madrid
    Mensajes
    883
    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:
    Última edición por ManuelLlorens; 23/05/2008 a las 14:27
    Manuel Llorens

    Olympus E-P1, E-510, E-300
    www.rawness.es

  16. #16
    Avatar de ariznaf
    ariznaf no ha iniciado sesión Eterno aprendiz...
    Fecha de ingreso
    21 Mar, 08
    Ubicación
    Oviedo
    Mensajes
    7,238
    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.

    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/05/2008 a las 13:37

  17. #17
    Avatar de ariznaf
    ariznaf no ha iniciado sesión Eterno aprendiz...
    Fecha de ingreso
    21 Mar, 08
    Ubicación
    Oviedo
    Mensajes
    7,238
    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.

  18. #18
    Avatar de ManuelLlorens
    ManuelLlorens no ha iniciado sesión Enganchad@ a los foros
    Fecha de ingreso
    30 Apr, 08
    Ubicación
    Madrid
    Mensajes
    883
    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:
    Última edición por ManuelLlorens; 23/05/2008 a las 16:11
    Manuel Llorens

    Olympus E-P1, E-510, E-300
    www.rawness.es

  19. #19
    Avatar de ManuelLlorens
    ManuelLlorens no ha iniciado sesión Enganchad@ a los foros
    Fecha de ingreso
    30 Apr, 08
    Ubicación
    Madrid
    Mensajes
    883
    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:
    Última edición por ManuelLlorens; 23/05/2008 a las 16:12
    Manuel Llorens

    Olympus E-P1, E-510, E-300
    www.rawness.es

  20. #20
    Avatar de ManuelLlorens
    ManuelLlorens no ha iniciado sesión Enganchad@ a los foros
    Fecha de ingreso
    30 Apr, 08
    Ubicación
    Madrid
    Mensajes
    883
    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-P1, E-510, E-300
    www.rawness.es

  21. #21
    Avatar de ManuelLlorens
    ManuelLlorens no ha iniciado sesión Enganchad@ a los foros
    Fecha de ingreso
    30 Apr, 08
    Ubicación
    Madrid
    Mensajes
    883

    Smile Una idea...

    Ariznaf:

    Dado que dentro de FastDraw, extra sólo se usa sumado a width, en vez de calcular extra, pasa directamente stride a FastDraw y sustituye width+extra por stride y width2+extra2 por stride2 en cada ocurrencia (eso vale porque en ese punto width y width2 ya estaban multiplicados por 3 y 6 respectivamente). Eso simplifica y optimiza un poco el código y además puede que solucione el problema. Era una optimización básica que tenía pendiente hacer cuando te pasé el código. Nunca pensé que pudiera fallar con anchos de imagen impar, la verdad.

    Si sigue fallando, comenta todo el bloque de código inicial que comprueba los límites del buffer y centra la salida (la primera vez que se llama zoom=1, x=0, y=0 y no hay límites que puedan fallar) para ver si está ahí el fallo (mucho más probable ahí que en el resto de la función). Comenta todo esto:

    Código:
       if(x<0) x=0;
       if(y<0) y=0;
    
       if(z>1){
          // Solution for out of bounds with zoom > 1.0
          if((int)(x+zf*(w+0.5))>=width2) x=(int)(width2-w*zf);
          if((int)(y+zf*(h+0.5))>=height2) y=(int)(height2-h*zf);
       }else{        
          // Solution for out of bounds with zoom <= 1.0      
          if((int)(x+zf*(w-0.5))>=width2) {w=(int)(width2*z-x);}
          if((int)(y+zf*(h-0.5))>=height2) {h=(int)(height2*z-y);}
       }
             
       // Center render in buffer    
       cx=(int)((float)width/2-(int)((float)width2*z/2.0));
       cy=(int)((float)height/2-(int)((float)height2*z/2.0));   
       if(cx<0) cx=0;
       if(cy<0) cy=0;
       if((int)(cx+width2*z)>=width) cx=0;
       if((int)(cy+height2*z)>=height) cy=0;
    Si todo eso falla sustituye la llamada en C# a FastDraw por llamadas a estas funciones que te pongo abajo según sea de 8 ó 16 bits el buffer (supongo que la de 8 no te hace falta), que es lo más simple (y rápido) que se puede hacer:

    Código:
     DLLIMPORT void Test8bits(PX8 *buffer, PX8 *buffer2, int width, int height, int stride, int stride2){
        int i,w;
        w=width*3;
        for(i=0;i<height;i++) memcpy(buffer+=stride,buffer2+=stride2,w);
    }
    
     DLLIMPORT void Test16bits(PX8 *buffer, PX16 *buffer2, int width, int height, int stride, int stride2){
        int i,j,w;
        w=width*3;
        for(i=0;i<height;i++){
           for(j=0;j<w;j++) buffer[j]=(PX8)(buffer2[j]>>8);
           buffer+=stride;
           buffer2+=stride2;
        }
    }
    Eso debería servir para aislar el problema. Una vez aislado, arreglarlo tiene que ser muy fácil.

    Si sigue fallando el error tiene que estar en C#, bien en cómo se llama a fastdraw, bien en cómo se preparan los buffers, bien en un error de GDI+.

    Un saludo:
    Última edición por ManuelLlorens; 23/05/2008 a las 16:20
    Manuel Llorens

    Olympus E-P1, E-510, E-300
    www.rawness.es

  22. #22
    Avatar de ManuelLlorens
    ManuelLlorens no ha iniciado sesión Enganchad@ a los foros
    Fecha de ingreso
    30 Apr, 08
    Ubicación
    Madrid
    Mensajes
    883
    Cita Iniciado por ariznaf Ver mensaje
    He subido el código al svn (bajo PruebasConcepto/PerfectControls). Constituye la versión 61.
    Juraría que el código de la DLL en SVN es sólo de 8 bits ¿no? ¿Es el que hay en PruebasConcepto/PerfectControls/PerfectImageDLL/PerfectImageDLL.c? No tiene ni el parpadeo ni las vistas partidas, y lo tengo completo en la revisión 61, ¿estoy haciendo algo mal? Ya sabes que SVN y yo hemos tenido nuestras diferencias en el pasado...

    Un saludo:
    Manuel Llorens

    Olympus E-P1, E-510, E-300
    www.rawness.es

  23. #23
    Avatar de ariznaf
    ariznaf no ha iniciado sesión Eterno aprendiz...
    Fecha de ingreso
    21 Mar, 08
    Ubicación
    Oviedo
    Mensajes
    7,238
    Manuel el código ya está en el svn. Lo puse nada más subir la prueba. Lo tienes en PruebasConcepto/PerfectControls.

    He cambiado el nombre de las variables para que fueran un poco más descriptivas (no te asustes que lo he hecho con mucho cuidado )

    Voy a cambiar lo de las plataformas en los proyectos.... Hasta voy a probar a crear uno de 64 bits por ver lo que pasa. En principio debería de funcionar (lo del revelado no, claro, pero lo de la visualización sí).
    En cuanto lo haya cambiado y probado un poco lo subo para que me digáis si por fin funciona en xp y versiones de 32 bits.

  24. #24
    Avatar de ariznaf
    ariznaf no ha iniciado sesión Eterno aprendiz...
    Fecha de ingreso
    21 Mar, 08
    Ubicación
    Oviedo
    Mensajes
    7,238
    Bueno, acabo de subir la nueva versión 0.7 http://www.ojodigital.com/prawpblend...tRawTest07.zip
    He cambiado los proyectos de compilación para generar código x86 nada más (y no anyCPU).

    He arreglado también el problema que comentaba Eduardo antes.
    Bueno ya me diréis si os funciona en las versiones de 32 bits.

    Manuel, si no funciona era bueno que te dercargaras el código del svn y probaras a compilarlo tú a ver si te funciona así.
    A mi me funciona perfectamente en mi ordenador (salvo lo comentado con algunas imágenes verticales, que creemos que no es por ser verticales sino por tener un número de pixels impar o no múltiplo de 4, habrá que estudiarlo).

    No he podido subirlo al svn porque me da un error.
    En la reordenación de directorios he tenido que borrar algunos y crear otros nuevos. Ahora al hacer el commit del directorio PruebasConcepto/PerfectControls

    Error: Working copy 'C:\Users\fernando\Documents\Visual Studio 2005\Projects\PerfectDeveloper\PruebasConcepto\Per fectControls' locked
    Error: Please execute the "Cleanup" command.

    Si hago el cleanup luego me vuelve a decir lo mismo.
    Vertex, ayuda: ¿cómo puedo conseguir que en svn ese directorio quede exactamente igual que en mi PC? ¿Lo borro todo y lo vuelvo a crear?
    Última edición por ariznaf; 23/05/2008 a las 19:31

  25. #25
    Avatar de ManuelLlorens
    ManuelLlorens no ha iniciado sesión Enganchad@ a los foros
    Fecha de ingreso
    30 Apr, 08
    Ubicación
    Madrid
    Mensajes
    883
    Cita Iniciado por ariznaf Ver mensaje
    Manuel, si no funciona era bueno que te dercargaras el código del svn y probaras a compilarlo tú a ver si te funciona así.
    Ya te he puesto por ahí arriba que casca porque compilas la DLL con VC++ y eso, por razones que se me escapan, da ese problema. Tienes que compilarla con MinGW y nos funcionará a todos.

    Un saludo:
    Manuel Llorens

    Olympus E-P1, E-510, E-300
    www.rawness.es

  26. #26
    Avatar de ariznaf
    ariznaf no ha iniciado sesión Eterno aprendiz...
    Fecha de ingreso
    21 Mar, 08
    Ubicación
    Oviedo
    Mensajes
    7,238
    Yo MIngWin no lo manejo, no sé hacer un proyecto ni nada de eso...

  27. #27
    Avatar de Guillermo Luijk
    Guillermo Luijk no ha iniciado sesión RAW RAW la botella de RAW
    Fecha de ingreso
    07 Mar, 06
    Ubicación
    Madrid (a ratos Alicante)
    Mensajes
    8,383
    Cita Iniciado por ariznaf Ver mensaje
    Bueno, acabo de subir la nueva versión 0.7
    pero como se llama? te pediría lo mismo qeu a Manuel, que cuando subais una versión nueva la enlaces al principio del primer post de este hilo, para encontrarla fácilmente.

    salu2
    "En ocasiones veo halos."

    http://www.guillermoluijk.com para suscribirte haz clic aquí
    Último contenido: PARA QUÉ SIRVE EL RANGO DINÁMICO?

  28. #28
    Avatar de ariznaf
    ariznaf no ha iniciado sesión Eterno aprendiz...
    Fecha de ingreso
    21 Mar, 08
    Ubicación
    Oviedo
    Mensajes
    7,238
    Es verdad que no había puesto el enlace al zip. Ahora ya está. Como dije es la versión 0.7.

    Pero por lo que dice Manuel, sigue sin funcionar en XP. Y eso que está todo compilado para plataforma x86. No sé si al haberlo compilado en Vista 64 puede venir de ahí el problema (la verdad es que sería raro, pero nunca se sabe con Microsoft).

    Manuel dice que se compile la DLL de PerfecImage en MingWin. El caso es que yo Dev-C++ no lo manejo para nada.... bueno, a ver si consigo hacer un proyecto de la parte de el PerfecImage.dll con Dev-C++.

    Entonces seguro que no funcionará en Vista 64

  29. #29
    Avatar de Guillermo Luijk
    Guillermo Luijk no ha iniciado sesión RAW RAW la botella de RAW
    Fecha de ingreso
    07 Mar, 06
    Ubicación
    Madrid (a ratos Alicante)
    Mensajes
    8,383
    boing!

    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.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)
    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/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.3065.32151
    Versión Win32: 1.0.0.0
    Código base: file:///C:/perfectRAW/PerfectControls.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."

    http://www.guillermoluijk.com para suscribirte haz clic aquí
    Último contenido: PARA QUÉ SIRVE EL RANGO DINÁMICO?

  30. #30
    Cazurro no ha iniciado sesión Lleva poco por aquí
    Fecha de ingreso
    02 May, 08
    Ubicación
    León
    Mensajes
    58
    OTRO BOING.....lo añado porque tiene alguna cosa mas que el de GUI, lo he ejecutado en windows 2000 SP4

    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.OutOfMemoryException: Memoria insuficiente.
    en System.Drawing.Image.FromFile(String filename, Boolean useEmbeddedColorManagement)
    en System.Drawing.Image.FromFile(String filename)
    en test.Form2.LoadImageFromFile(String imgFileName)
    en test.Form2.SelectImageToOpen()
    en test.Form2.btnOpenFile_Click(Object sender, EventArgs e)
    en System.Windows.Forms.Control.OnClick(EventArgs e)
    en System.Windows.Forms.Button.OnClick(EventArgs e)
    en System.Windows.Forms.Button.OnMouseUp(MouseEventAr gs mevent)
    en System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
    en System.Windows.Forms.Control.WndProc(Message& m)
    en System.Windows.Forms.ButtonBase.WndProc(Message& m)
    en System.Windows.Forms.Button.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.1433 (REDBITS.050727-1400)
    Código base: file:///C:/WINNT/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:/Documents%20and%20Settings/josealberto.calvo.DIARIODELEON.000/Escritorio/PerfectRawTest07/test.exe
    ----------------------------------------
    System.Windows.Forms
    Versión del ensamblado: 2.0.0.0
    Versión Win32: 2.0.50727.1433 (REDBITS.050727-1400)
    Código base: file:///C:/WINNT/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.1433 (REDBITS.050727-1400)
    Código base: file:///C:/WINNT/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.1433 (REDBITS.050727-1400)
    Código base: file:///C:/WINNT/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
    ----------------------------------------
    mscorlib.resources
    Versión del ensamblado: 2.0.0.0
    Versión Win32: 2.0.50727.1433 (REDBITS.050727-1400)
    Código base: file:///C:/WINNT/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
    ----------------------------------------
    PerfectControls
    Versión del ensamblado: 1.0.3065.32151
    Versión Win32: 1.0.0.0
    Código base: file:///C:/Documents%20and%20Settings/josealberto.calvo.DIARIODELEON.000/Escritorio/PerfectRawTest07/PerfectControls.DLL
    ----------------------------------------
    System.Drawing.resources
    Versión del ensamblado: 2.0.0.0
    Versión Win32: 2.0.50727.42 (RTM.050727-4200)
    Código base: file:///C:/WINNT/assembly/GAC_MSIL/System.Drawing.resources/2.0.0.0_es_b03f5f7f11d50a3a/System.Drawing.resources.dll
    ----------------------------------------
    System.Windows.Forms.resources
    Versión del ensamblado: 2.0.0.0
    Versión Win32: 2.0.50727.42 (RTM.050727-4200)
    Código base: file:///C:/WINNT/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.

  31. #31
    Avatar de ariznaf
    ariznaf no ha iniciado sesión Eterno aprendiz...
    Fecha de ingreso
    21 Mar, 08
    Ubicación
    Oviedo
    Mensajes
    7,238
    El tuyo es distinto, Parece que no tenías memoria suficiente para todo lo que necesita el programa...
    El programa no controla todavía las excepciones, por lo que si al pedir memoria, no hay suficiente, casca con ese error.

    De todas formas, Manuel y yo hemos estado probando. Parece que la dll compilada con MS VC++ no funciona en algunos sistemas. En el mío con Vista 64 (en el que lo compilé) sí que funciona, pero en XP y otros Win32 no. Es curioso porque la DLL es win32.

    No hemos probado a compilar la dll con VC++ en XP o Vista 32 (si alquien se anima, estaría bien probarlo).

    Hemos probado con MingWin y sí que funciona tanto en Vista 64 como en XP.
    Así que la versión de distribución de las pruebas se compilará con Dev-C++
    Así que he actualizado la versión puesta en ojodigital con la dll compilada con MingWin (Dev-C++).

    Probádlo ahora y me vais diciendo. Está en http://www.ojodigital.com/prawpblend...tRawTest07.zip
    Última edición por ariznaf; 23/05/2008 a las 21:55

  32. #32
    Eduardo Cañadas no ha iniciado sesión Lleva poco por aquí
    Fecha de ingreso
    27 Aug, 07
    Ubicación
    Barcelona
    Mensajes
    34
    Bueno ahora me funciona en Vista 64 y en un XP corriendo en una maqina virtual y con la misma resolucion de pantalla, el test es mas rapido en la maquina virtual casi sin memoria que en el Vista con 6Gb.... El windows casi siempre sorprende

  33. #33
    Avatar de Guillermo Luijk
    Guillermo Luijk no ha iniciado sesión RAW RAW la botella de RAW
    Fecha de ingreso
    07 Mar, 06
    Ubicación
    Madrid (a ratos Alicante)
    Mensajes
    8,383
    la bomba tío, que pasada! lo de las pantallas partidas da una sensación de potencia que ni te cuento. Felicidades.

    (Vista 32 OK)
    "En ocasiones veo halos."

    http://www.guillermoluijk.com para suscribirte haz clic aquí
    Último contenido: PARA QUÉ SIRVE EL RANGO DINÁMICO?

  34. #34
    Avatar de ariznaf
    ariznaf no ha iniciado sesión Eterno aprendiz...
    Fecha de ingreso
    21 Mar, 08
    Ubicación
    Oviedo
    Mensajes
    7,238
    Bueno, menos mal, respiro un poco más traquilo

    A ver si no se vuelve a estropear, porque esto es más delicado y falla más que una escopeta de feria.

    Por cierto, si os falla con una imagen (que fallará, probad también con imagenes verticales, que aunque no tenga que ver...) poned la información de tamaño de la imagen (horizontalxvertical) y orientación.

    Creo que hay aún algún error con lo del padding que hace windows que obliga a que el ancho en bytes de una imagen sea múltiplo de 4.

  35. #35
    Avatar de ariznaf
    ariznaf no ha iniciado sesión Eterno aprendiz...
    Fecha de ingreso
    21 Mar, 08
    Ubicación
    Oviedo
    Mensajes
    7,238
    Bueno, después de algunos problemas con el svn (a ver cuándo demonios aprendo a manejarlo de una vez) por fin he puesto el código de la versión 0.7 en el google code, con los proyectos de VS y Dev-C++ actualizados y correctos.

    Por favor, si tenéis una versión anterior del directorio PruebasConcepto/PerfectControls, actualizar a la última verión (81)

  36. #36
    Avatar de ariznaf
    ariznaf no ha iniciado sesión Eterno aprendiz...
    Fecha de ingreso
    21 Mar, 08
    Ubicación
    Oviedo
    Mensajes
    7,238
    Bueno he localizado el problema de las imágenes con bits impares.
    Lo he arreglado para el algoritmo FastDraw de la imagen simple pero me falta hacerlo para las imágenes partidas.
    A ver si mañana lo tengo.

  37. #37
    Avatar de Guillermo Luijk
    Guillermo Luijk no ha iniciado sesión RAW RAW la botella de RAW
    Fecha de ingreso
    07 Mar, 06
    Ubicación
    Madrid (a ratos Alicante)
    Mensajes
    8,383
    fenomenal. oye he probado el parpadeo de luces quemadas, creo que no se necesita para nada bajar el brillo de los colores a usar, recuerdas el 128 a que poníamos el colore de cada canal quemado? ponlo a 255. se verán mucho mejor.

    Última edición por Guillermo Luijk; 24/05/2008 a las 02:23
    "En ocasiones veo halos."

    http://www.guillermoluijk.com para suscribirte haz clic aquí
    Último contenido: PARA QUÉ SIRVE EL RANGO DINÁMICO?

  38. #38
    Avatar de ariznaf
    ariznaf no ha iniciado sesión Eterno aprendiz...
    Fecha de ingreso
    21 Mar, 08
    Ubicación
    Oviedo
    Mensajes
    7,238
    Pues sí, es verdad, destaca más y hace más clara la indicación de que están quemados al tener un brillo mayor.

    El color cambia por el hecho de que los colores no quemados pasen a valer 0 y sigue destacando de los pixels que lo rodean.

    Pero hay un problema: cuando tenemos colores primarios o secundarios puros en la imagen.

    Imagínate un rojo casi puro. Sus valores serán 65279.0.0 y al convertirlo pasaría a 254,0,0. Si al lado tiene un pixel quemado 65535.0.0, al marcarlo quemado serían 255,0,0 y ambos serían casi indistinguibles.

    Lo mismo con verdes, azules, amarillos, cyan y magenta.

    Con los blancos también, que será más habitual: 255,255,255 no destacará rodeado de una zona cerca de quemarse 254,254,254. Esta situación será mucho más habitual.

    Sin embargo, si se baja su luminosidad sí que destacará de los pixels del entorno por el contraste lumínico.

    Quizás un valor intermedio fuera más adecuado....
    ¿Qué hago, cómo lo dejo?

    A lo mejor habría que preparar un Tif con una imagen sintética con las situaciones que comento para probar la mejor opción.
    Última edición por ariznaf; 24/05/2008 a las 08:54

  39. #39
    Avatar de ManuelLlorens
    ManuelLlorens no ha iniciado sesión Enganchad@ a los foros
    Fecha de ingreso
    30 Apr, 08
    Ubicación
    Madrid
    Mensajes
    883
    Cita Iniciado por ariznaf Ver mensaje
    Bueno he localizado el problema de las imágenes con bits impares.
    Lo he arreglado para el algoritmo FastDraw de la imagen simple pero me falta hacerlo para las imágenes partidas.
    A ver si mañana lo tengo.
    ¿No habíamos quedado que lo miraba yo? ¡No me hagas trabajar en balde! Ayer te puse en un privado que ya lo tenía arreglado yo... en fin, cancelaré lo que llevo hecho, me bajaré de SVN lo tuyo y seguiré con el revelador. Por si acaso: lo único que falta es un paréntesis para z<1 y una condición en C#.

    He visto tus emails de ayer por la noche... veo que hemos trabajado en paralelo.

    Un saludo:
    Última edición por ManuelLlorens; 24/05/2008 a las 12:01
    Manuel Llorens

    Olympus E-P1, E-510, E-300
    www.rawness.es

  40. #40
    Avatar de Carlos Arias
    Carlos Arias no ha iniciado sesión Enganchad@ a los foros
    Fecha de ingreso
    17 Jul, 05
    Ubicación
    Hamburgo, Alemania
    Mensajes
    1,173
    xp sp3 , Pentium dual core 3 GHz, 2 GB ram y .NET Framework 2.0
    Hola chicos, a mi no me va. Casca cuando esta intentando abrir una imagen y abre la ventanita de siempre con la informacion que os pondre a continuacion. Sinembargo si le doy a la opcion de continuar a pesar del fallo abre la imagen en el lado izquierdo ensenando la imagen con las funciones de zoom y pixeles activas.
    He intentado abrir 2 tiff 16bits, primero el del salon de Gui y luego uno propio.

    Desafortunadamente mi SO esta en aleman pero seguro que os dice algo:

    ************** Ausnahmetext **************
    System.IO.FileNotFoundException: imgPrueba.tif
    bei System.Drawing.Image.FromFile(String filename, Boolean useEmbeddedColorManagement)
    bei System.Drawing.Image.FromFile(String filename)
    bei test.Form2.LoadImageFromFile(String imgFileName)
    bei test.Form2.SelectImageToOpen()
    bei test.Form2.btnOpenFile_Click(Object sender, EventArgs e)
    bei System.Windows.Forms.Control.OnClick(EventArgs e)
    bei System.Windows.Forms.Button.OnClick(EventArgs e)
    bei System.Windows.Forms.Button.OnMouseUp(MouseEventAr gs mevent)
    bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
    bei System.Windows.Forms.Control.WndProc(Message& m)
    bei System.Windows.Forms.ButtonBase.WndProc(Message& m)
    bei System.Windows.Forms.Button.WndProc(Message& m)
    bei System.Windows.Forms.Control.ControlNativeWindow.O nMessage(Message& m)
    bei System.Windows.Forms.Control.ControlNativeWindow.W ndProc(Message& m)
    bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


    ************** Geladene Assemblys **************
    mscorlib
    Assembly-Version: 2.0.0.0.
    Win32-Version: 2.0.50727.42 (RTM.050727-4200).
    CodeBase: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll.
    ----------------------------------------
    test
    Assembly-Version: 1.0.0.0.
    Win32-Version: 1.0.0.0.
    CodeBase: file:///C:/Dokumente%20und%20Einstellungen/Carlos%20Arias/Desktop/Neuer%20Ordner/PerfectRawTest07/PerfectRawTest07/test.exe.
    ----------------------------------------
    System.Windows.Forms
    Assembly-Version: 2.0.0.0.
    Win32-Version: 2.0.50727.42 (RTM.050727-4200).
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll.
    ----------------------------------------
    System
    Assembly-Version: 2.0.0.0.
    Win32-Version: 2.0.50727.42 (RTM.050727-4200).
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll.
    ----------------------------------------
    System.Drawing
    Assembly-Version: 2.0.0.0.
    Win32-Version: 2.0.50727.42 (RTM.050727-4200).
    Última edición por Carlos Arias; 24/05/2008 a las 09:28
    “La fotografía es como una cuchilla que secciona para la eternidad el instante que la ha deslumbrado” Cartier-Bresson

  41. #41
    Avatar de truji
    truji no ha iniciado sesión Lleva poco por aquí
    Fecha de ingreso
    17 Dec, 07
    Ubicación
    Vilassar de Dalt. BCN
    Mensajes
    50
    Lo he estado probando, creo que da la excepción de que no encuentra el imgPrueba.tif cuando has cargado el tif de otra ubicación que no sea donde está el imgpruba.tif (o todos los archivos que es como lo he probado)

    Creo que hay comportamientos raros segun el tipo de tif que cargues, en alguna modalidad casca solo al cargar, en otras muestra la imagen rara. Igual conviene asegurarse de qué pixelformat hay en la imagen y en su caso llamar al GDI+ para que lo convierta a un formato único y controlado.

    Animos y saludos

  42. #42
    Avatar de ariznaf
    ariznaf no ha iniciado sesión Eterno aprendiz...
    Fecha de ingreso
    21 Mar, 08
    Ubicación
    Oviedo
    Mensajes
    7,238
    Truji, eso que comentas es cierto y está detectado.

    Se debe a las imágenes que tengan un número de pixels que no sea múltiplo de 4 <manuel>:de dos, en realidad, o sea que no sean pares.
    ariznaf: según el manual de BitmapData.Stride 4:
    El paso es el ancho de una fila de píxeles (una línea de exploración), redondeado por exceso al ancho delimitado por cuatro bytes. El paso es siempre mayor o igual que el ancho real en píxeles. Si el paso es positivo, el mapa de bits es de arriba abajo. Si el paso es negativo, el mapa de bits es de abajo arriba.
    En estas imágenes, las filas son rellenadas por la derecha con bytes de relleno.
    El algoritmo no funcionaba con este tipo de imágenes.
    De todas formas, por si acaso, compruébalo viendo el tamaño de la imagen que te representa mal y si no cumple lo anterior, ponme un mensaje con las dimensiones de la imagen que no te funciona.

    Eso lo tengo ya arreglado para la visualización de imagen en forma simple. Tengo que arreglarlo también en la visualización partida en horizontal y vertical.

    De paso estoy haciendo alguna optimización menor.

    En cuanto esté seguro de que funciona correctamente, subo una nueva versión y pongo un nuevo hilo para comentar sobre ella.
    Última edición por ariznaf; 25/05/2008 a las 14:14

  43. #43
    Avatar de Guillermo Luijk
    Guillermo Luijk no ha iniciado sesión RAW RAW la botella de RAW
    Fecha de ingreso
    07 Mar, 06
    Ubicación
    Madrid (a ratos Alicante)
    Mensajes
    8,383
    Cita Iniciado por ariznaf Ver mensaje
    Pero hay un problema: cuando tenemos colores primarios o secundarios puros en la imagen.

    Imagínate un rojo casi puro. Sus valores serán 65279.0.0 y al convertirlo pasaría a 254,0,0. Si al lado tiene un pixel quemado 65535.0.0, al marcarlo quemado serían 255,0,0 y ambos serían casi indistinguibles.
    creo que no hay que preocuparse mucho porque... en la naturaleza no existen colores así! una rosa por muy roja que sea tendrá niveles azul y sobre todo verde que la harán bastante diferente de (255,0,0).

    En este artículo creé en la pantalla parches de colores puros, que seguro que están más saturados que cualquier cosa de la naturaleza, y la cámara siempre los ve con contenido en los 3 canales (el canal G siempre está presente): TIENE MÁS RUIDO EL CANAL AZUL?. El que salió más puro fue el verde y aún así tenía contenido R y B a unos dos pasos de diafragma.

    Otra cosa, podríamos ir poniendo las bases para dibujar el histograma. Abro un hilo a propósito.
    "En ocasiones veo halos."

    http://www.guillermoluijk.com para suscribirte haz clic aquí
    Último contenido: PARA QUÉ SIRVE EL RANGO DINÁMICO?

  44. #44
    Avatar de truji
    truji no ha iniciado sesión Lleva poco por aquí
    Fecha de ingreso
    17 Dec, 07
    Ubicación
    Vilassar de Dalt. BCN
    Mensajes
    50
    Cita Iniciado por ariznaf Ver mensaje
    Truji, eso que comentas es cierto y está detectado.

    Se debe a las imágenes que tengan un número de pixels que no sea múltiplo de 4 <manuel>:de dos, en realidad, o sea que no sean pares.
    En estas imágenes, las filas son rellenadas por la derecha con bytes de relleno.
    El algoritmo no funcionaba con este tipo de imágenes.
    Jelou, ya lo tengo, lo he probado con una de 800 de ancho y también. Te iba a mandar el tif pero entonces me he dado cuenta: Ocurre en tiffs con canal alpha (en PS tienen un canal Alpha en la paleta de canales). Como me imagino que eso ya no es relevante para los RAWs lo dejo pero si quieres te paso el tiff.

  45. #45
    Avatar de Guillermo Luijk
    Guillermo Luijk no ha iniciado sesión RAW RAW la botella de RAW
    Fecha de ingreso
    07 Mar, 06
    Ubicación
    Madrid (a ratos Alicante)
    Mensajes
    8,383
    Cita Iniciado por truji Ver mensaje
    Ocurre en tiffs con canal alpha (en PS tienen un canal Alpha en la paleta de canales). Como me imagino que eso ya no es relevante para los RAWs lo dejo pero si quieres te paso el tiff.
    si es esto no te comas la cabeza ariznaf porque el programa final no va a leer TIFFs, los va a generar él, así que confirmado esto no le dedicaría más tiempo al asunto.
    "En ocasiones veo halos."

    http://www.guillermoluijk.com para suscribirte haz clic aquí
    Último contenido: PARA QUÉ SIRVE EL RANGO DINÁMICO?

  46. #46
    Avatar de fenixuco
    fenixuco no ha iniciado sesión Vivo en los foros
    Fecha de ingreso
    12 Jun, 05
    Ubicación
    VIZCAYA
    Mensajes
    2,568
    Pues mi pequeña aportación, he probado el programa con los RAW de la fuji y bien, pero me deja. al abrir la foto, arriba una parte que no abre bien, solo es una linea, y ya me ha pasado con otros programas para revelar raw con la fuji. Con los raw de la Olimpus, va bien, he probado con una foto que tenia bastante zona quemada y ha recuperado una parte, todo no... y solo deciros que enhorabuena por la iniciativa, seguiré al tanto de este hilo.

    Un saludo
    Quién pregunta será un ignorante durante 5 minutos... quién no lo hace lo será durante toda la vida.

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •