Hola invitado         31 Jul, 2010 - 07:33
Menú principal
 
Ads
 
Patrocinadores
 
Anuncios
 
© 2009 PortalFox
Bug en la generación de PictureVal (Cesar Chalom) Traducción lecturas 1789
 Enviado por amby en Miércoles, 22 Agosto, 2007
Artículos Cesar Chalom comenta algunas particularidades y comportamientos que tiene esta propiedad PictureVal, a partir de la experiencia de varios desarrolladores.

Bug en la generación de PictureVal

Artículo original: Bug in PictureVal rendering
http://weblogs.foxite.com/cesarchalom/archive/2007/04/10/3669.aspx
Autor: Cesar Chalom (http://weblogs.foxite.com/cesarchalom)
Traducido por: Ana María Bisbé York (amby@telefonica.net)
Para: PortalFox (http://www.portalfox.com)


Hoy Emerson Reed, el autor de OutlookBar, a puesto una pregunta en UT

"Estoy probando la propiedad PictureVal y he encontrado un comportamiento extraño ...

 Tengo una imagen con height = 8 y width = 1 y un control image con height = 8, width = 91 y stretch = 2.

Si coloco esta imagen en el control utilizando la propiedad Picture, la imagen se muestra correctamente; pero si utilizo las funciones FileToStr o LoadPicture para obtener la imagen y asignar la propiedad PictureVal con el valor devuelto por una de estas dos funciones, la parte izquierda se muestra correctamente ; pero se va tornando gradualmente más transparente a medida que se acerca a la derecha.

He intentado con el SP2 y con muchos formatos: PNG, BMP, GIF y JPEG y siempre me ocurre lo mismo."

Bueno, la primera imagen que Emerson quería estirar utilizando el objeto Image, mejoró 48 veces incrementada.

El deseaba enviar una imagen de 8x1 píxel a un objeto Image utilizando la propiedad PictureVal. Algo como esto:

Thisform.Image1.Stretch = 2 && Estirar 
Thisform.image1.PictureVal = FILETOSTR(lcImageFile) 

El objeto image tenía la propiedad Stretch = 2, porque esperaba que VFP estiraría la imagen original de 1 píxel de ancho, al ancho del control.

Pero para nuestra sorpresa, el resultado final fue diferente a lo esperado.

Note que el objeto Image generado utilizando PictureVal se convertía en degradado, ¡ con un color transparente en el lado derecho ! Cuando utilizó la propiedad Picture original apuntando a la ruta de la imagen deseada, VFP generó la imagen tal y como se deseaba. Esta prueba se hizo utilizando PNG, GIF, JPEG y BMP. Observe que la imagen PNG no se generó debido a un error conocido de PictureVal que no reconoce PNG y que parece que será reparado en el SP2 CTP.

Puede descargar el ejemplo de arriba y probar este problema desde aquí

http://www.foxite.com/uploads/ddaa36cc-b759-47de-88c9-734aa52a233c.zip

Sólo en caso de que usted no conozca el trabajo de Emerson, el es el autor de una barra Outlook2003 muy buena y bonita, que usted puede ver en la siguiente imagen. Está mejorando este control para obtener mejor rendimiento, y para hacerlo compatible con estilo OFFICE 2007. Esta es la razón para los degradados verticales

En GdiPlus-X nosotros utilizamos mucho Image Canvas en nuestros ejemplos.

Este control básicamente guarda la imagen deseada en secuencias, recibe los binarios y guarda el contenido en la propiedad PicturaVal del control image.

Bo y yo notamos que la imagen generada por Picture y PictureVal también eran diferentes.

La imagen con PictureVal aparecía borrosa, incluso cuando no lo deseábamos, parece que utiliza siempre un modo liso ANTI-ALIAS

Observe que la imagen original, desde la esquina superior izquierda parece perfecta en 3 casos cuando se utiliza la propiedad Picture. Cuando se utiliza PictureVal, si Stretch es 0 - Clip - la imagen se recorta para que se ajuste al control. (Predeterminado para el control), la imagen se genera por Picture es EXACTAMENTE LA MISMA que una generada utilizando PictureVal.

El problema ocurre solamente cuando el modo Stretch es 1 - Isométrico (la imagen se redimensiona para que se ajuste al control mientras mantiene las mismas proporciones) o 2 - Stretch ( la imagen se redimensiona para que se ajuste al control; pero no mantiene sus proporciones originales). En este caso, la imagen generada en PictureVal se vuelve realmente borrosa.

Debajo hay un pedazo de la imagen mejorada. Vea cómo las esquinas se ven borrosas.

Como asumo que VFP estira las imágenes que utilizan la propiedad PictureVal en lugar de la propiedad Picture original se utiliza un modo SmoothingMode  Anti_Alias

Antialiasing = suavizar línea de bordes en imágenes de PC: suavizar los bordes de dentados diagonal líneas en computadora imágenes generadas por la variación del color o diversos tonos de gris en los bordes.
Microsoft® Encarta® Reference Library 2003. © 1993-2002 Microsoft Corporation. All rights reserved.

Si aun no ha utilizado la propiedad PictureVal, puede crear un formulario sencillo, agregar un botón de comando, command1 y dos objetos image, image1 e image2. En el Command1.Click agregue el siguiente código:

LOCAL lcPict
lcPict = GETPICT()
IF EMPIF EMPTY(lcPict)
  RETURN
ENDIF
 
Thisform.Image1.Picture = lcPict
Thisform.Image2.Stretch = 2 && Estirar 
Thisform.Image2.PictureVal = FILETOSTR(lcPict) 

Pruébelo utilizando varias figuras pequeñas, que sean mucho más pequeñas que el objeto image.

En el caso de Emerson, como su imagen original tiene solamente un píxel de ancho, y espera el objeto image para repetir el dibujado muchas veces, hasta que el control se llene, VFP parece que está utilizando aun el último píxel generado y copia para la próxima columna. Por esto es que parece que cambia la imagen, creando un degradado feo y no deseado.

Las únicas soluciones que yo puedo encontrar para este caso son:

  1. No utilice PictureVal si necesita estirar una imagen muy pequeña, en su lugar, utilice la propiedad Picture. Incluso si los binarios de la imagen se almacenan en una variable, o dentro del VCX (utilizando el maravilloso consejo de Bernard Bout. yo recomendaría guardar la imagen en un archivo temporal en el disco utilizando STRTOFILE() - y apuntar a la propiedad Picture. Tenga en cuenta que utilizar el disco no es malo. VFP también utiliza mucho el disco, para crear muchos archivos temporales para cursores. Y nadie lo nota. Y en muchos casos, utilizar el acceso a disco es más rápido que utilizar cadenas.
  2. Si usted realmente necesita estirar una imagen y desea utilizar PictureVal, entonces, puede estirar su imagen utilizando GDI+, guardándola en una secuencia, recuperando los binarios de la secuencia y guardándolo en la propiedad PictureVal. Este proceso aun no se ha mostrado en este escrito. Espero mostrarlo pronto. Pero, francamente, la primera sugerencia es más sencilla y más recomendada.

Este problema también fue encontrado por Bernard Bout y se comentó en el blog de Craig Boyd:

http://www.sweetpotatosoftware.com/SPSBlog/CommentView,guid,94b58210-456a-4fc5-84c9-39db7dcde478.aspx#commentstart

Ha sido también reportado hoy a Microsoft por Emerson Reed

https://connect.microsoft.com/feedback/viewfeedback.aspx?FeedbackID=269606&wa=wsignin1.0&siteid=210

El equipo GdiPlusX, Emerson y yo, tenemos gran interés en solucionar este problema, porque tenemos muchas posibilidades de uso de esta característica en el objeto ImageCanvas, al brindar posibilidades Direct Draw, que permite a los desarrolladores VFP olvida los problemas del Windows Painting. Por tanto necesitamos tener el control correcto de la imagen.

Lo correcto es que PictureVal genere exactamente de la misma forma que lo hace Picture. MS debe permitir a sus usuarios, seleccionar cuando desean utilizar el modo Smoothing y el mejor modo de interpolación. Como sabemos el SP2 se va a liberar pronto, le pedimos que revise este enlace y envíe sus comentarios a MS.

https://connect.microsoft.com/feedback/viewfeedback.aspx?FeedbackID=269606&wa=wsignin1.0&siteid=210

Por favor, valídelo y puntúelo, puede ser que nuestros amigos del Micosoft FoxTeam puedan emplear algún tiempo arreglando esto para nosotros.

Otra característica muy interesante fuera si ellos añadieran además la propiedad PictureVal a cualquier objeto que contenga la propiedad Picture como Image: CommandButton, Container, Form, Header, etc. Si está de acuerdo con esto, vote aquí: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=240030

¡ Gracias por adelantado !


 Versión imprimible  
Bug en la generación de PictureVal (Cesar Chalom) Traducción | Entrar/Crear una cuenta | 0 Comentarios
Los comentarios son propiedad de sus respectivos autores.
No somos responsables de su contenido.



Todas las marcas y los logos utilizados en este sitio son propiedad de sus respectivos dueños.
Los artículos, noticias y comentarios son propiedad y responsabilidad de sus respectivos autores.
Copyright © 2000-2010 PortalFox. Todos los derechos reservados.