Stretching an image

Muchas aplicaciones disponen de una pequeña previsualización de sus documentos, de ésta manera echando un vistazo a su preview o thumbnail nos podemos hacer una idea de que documento o proyecto hay dentro de ese fichero. El problema me vino a la mente cuando trabajando en mi proyecto (VLO) me di cuenta de que había hecho más de 20 proyectos y ya ni me acordaba que había en cada uno de ellos, y claro la única solución es abrir cada uno de los documentos hasta encontrar el proyecto que querías abrir.

La solución que propongo aún está muy verde pero es una solución que de momento va bien y que permite obtener la imagen del documento que se está editando sobre el canvas, recortar la parte útil y redimensionarla para que luego podamos mostrarla en el preview de la carga de proyectos.

Para daros una idea, éste es el resultado de aplicar un algoritmo de Stretching sobre un bitmap:

El código fuente aplicado para el Stretching es el siguiente:


procedure TBoxManager.Save(Project: String);
function ResizeBmp(bitmp: TBitmap; wid, hei: Integer): Boolean;
var
TmpBmp: TBitmap;
ARect: TRect;
begin
Result := false;
try
TmpBmp := TBitmap.Create;
try
TmpBmp.width := wid;
TmpBmp.height := hei;
ARect := Rect(0, 0, wid, hei);
TmpBmp.Canvas.StretchDraw(ARect, bitmp);
bitmp.Assign(TmpBmp);
finally
TmpBmp.Free;
end;
Result := true;
except
Result := false;
end;
end;

var
i: Integer;
p1, p2: TPoint;
image2: TImage;
begin
p1 := Point(9999, 9999);
p2 := Point(0, 0);
for i := 0 to Boxlist.Count - 1 do
begin
if Boxlist[i].Vertex1.X < p1.X then
p1.X := Boxlist[i].Vertex1.X;
if Boxlist[i].Vertex1.Y < p1.Y then
p1.Y := Boxlist[i].Vertex1.Y;
if Boxlist[i].Vertex2.X > p2.X then
p2.X := Boxlist[i].Vertex2.X;
if Boxlist[i].Vertex2.Y > p2.Y then
p2.Y := Boxlist[i].Vertex2.Y;
end;

if (p1.X <> 9999) and (p1.Y <> 9999) and (p2.X <> 0) and (p2.Y <> 0) then
begin
image2 := TImage.Create(Self);
image2.Canvas.CopyRect(Rect(0, 0, image2.width, image2.height), FCanvas, Rect(p1.X, p1.Y, p2.X, p2.Y));
ResizeBmp(image2.Picture.Bitmap, 150, 120);
image2.Picture.SaveToFile(Project + '\preview.bmp');
FreeAndNil(image2);
end;
end;


Y para la carga de la imagen:


procedure TfrmLoad.ListBox1Click(Sender: TObject);
var
loadImage: string;
begin
loadImage := ExtractFilePath(ParamStr(0)) + 'files\';
loadImage := loadImage + ListBox1.Items[ListBox1.ItemIndex];
loadImage := loadImage + '.tbm';
if FileExists(loadImage + '\preview.bmp') then
begin
drawRectangle(clwhite, clwhite);
Image1.Picture.LoadFromFile(loadImage + '\preview.bmp')
end
else
begin
drawRectangle(clwhite, clwhite);
end;
end;


como podéis ver, no tiene ningún misterio. Ahora lo que hay que conseguir es poder conseguir una mayor calidad en el thumbnail evitando éste pixelado que queda.

Podéis descargar la última versión de la plataforma para comprobar los resultados:
  • Enlaces de interés:
Copy one image to another.
Stretching image.

Meditation and Learning

Hoy os dejo la continuación del anterior capítulo de redes - Educationg world citizens dor the 21st Century -. En éste interesante reportaje veremos lo importante que es el desarrollo social y emocional para poder moldear mejor tu cerebro. Como yogi, he podido comprobar de primera mano las mejoras en salud mental al practicar la meditación y sobretodo mejorar la capacidad de atención y de toma de decisiones. Si consultáis el libro de Andy Hunt sobre el "Pensamiento y aprendizaje pragmático" del cuál os llevo hablando muchos meses, en uno de los últimos capítulos aparece una pequeña entrada hacia el mundo contemplativo y la utilización de la meditación para el entreno de tu mente.






New features with VLO framework part V

Aún estoy retocando diversas características de la plataforma y me queda mucho trabajo por delante. Pero lo bueno es que el proyecto sigue en pie, con muchísimos cambios insignificantes a simple vista, pero que marcan una gran diferencia en el comportamiento final. He actualizado temas de movimiento y conexionado de nodos, de ésta manera podemos realizar ediciones mucho más rápidas y más precisas. Además estoy empezando a llevar el sistema al límite, realizando pruebas unitarias sobre las diversas clases que tengo (os recomiendo el Pragmatic unit testing donde se muestran muchas de las técnicas utilizadas sobre las pruebas unitarias) y sobrecargando los diversos objetos intentando que el sistema se vuelva inestable.

De momento las pruebas son satisfactorias y la aplicación parece robusta. Aquí os dejo las nuevas funcionalidades de la plataforma:
  • Mejora en el conexionado entre nodos (corrección del cursor)
  • Posibilidad de incrustar una imagen en el background de la aplicación
Por ejemplo ahora en minutos podemos crear increíbles diagramas de todo tipo y lo mejor de todo es que luego podremos personalizar el funcionamiento de los objetos para propósito general. El siguiente ejemplo es una muestra a un vistazo a un enrutamiento de red:

Ésta imagen dispone de más de 200 nodos y 230 vértices y el movimiento y los cálculos siguen siendo muy rápidos.

Además al poder cargar una imagen de fondo, podemos dibujar diagramas sobre planos y así luego diseñar diversos algoritmos para la búsqueda de caminos mínimos o rutas:

También os dejo el último vídeo que ha subido mostrando las últimas características implementadas y que espero que os sorprendan y os gusten:





Aquí os dejo también el enlace al último built que he hecho de la plataforma en Win32 para que so la podáis descargar y probar. Los ejemplos con las imágenes también los podréis encontrar aquí.


Adding more features to the Blog

El blog aún no está al 100% y me falta arreglar un par de cosas. He añadido unos botones más interesantes en el panel de la derecha desde donde podéis contactar conmigo desde diferentes frentes (twitter, linkedIn, etc).
Desde bloggerStop he encontrado un artículo muy interesante de cómo integrar esos botones en el blog y hacer un pequeño efecto de opacidad al pasar el mouse por encima.








Además podemos crear diferentes tipos de botones ya que por la red corren muchísimas aplicaciones online que permiten personalizar todos éstos enlaces.

He añadido también el componente de traducción de google que faltaba, y el también famoso RevolverMaps que integra una mini aplicación que te permite ver de dónde son los diferentes lectores. Funciona igual que ClusterMaps pero me gusta bastante más por su interfaz gráfica.


  • Enlaces de interés:
Adding social networking buttons.
Opacity image hover effect.

Paper?, that's and old story

Durante las últimas semanas he estado mirando diferentes modelos de libros electrónicos y después de largas comparaciones entre modelos, por fin! ya tengo mi Sony eReader PRS-505. Éste modelo (no táctil) es uno de los mejores situados en las comparaciones por su calidad y precio. Los que me seguís en el blog sabéis que soy un lector asiduo y hacía tiempo que me quería mirar uno de éstos lectores ya que en la última conferencia que fui vi que la gente los utilizaba bastante. Además de ser increíblemente útil, te permite poder llevar encima todos los libros que quieras. Dispone de una memoria base de unos 200 Mb y luego podemos ir añadiendo memorias SD. Ya casi tengo el dispositivo listo, con todos mis libros en formato electrónico, audio libros, imágenes, etc.

La pantalla me sorprendió ya que su lectura no cansa los ojos y la navegación es rápida. Si que a veces hay que tener un poco de paciencia con el dispositivo pero después de trastearlo bastante no se ha colgado ni una vez (y eso que he visto que en la parte posterior tiene la típica pestaña de reset).

Aquí os dejo un vídeo de youtube que me parece interesante para mostraros las diferentes características del lector:




Como comento en el título del post, con éstos dispositivos evitaremos el ir con los libros encima todo el tiempo. Ésto representa un cambio importante, ya que perdemos el cálido contacto de las hojas de papel, el olor, la textura, etc. por una máquina fría con una autonomía de más de 9000 páginas leídas antes de volver a recargar, con reproductor MP3, con visor de imágenes y muchas cosas más que puede nos haga leer más o puede que nos vuelva a llevar otra vez hacia el viejo papel. Quien sabe, depende de nuestra adaptación al medio.

New Image!

Como podréis ver, la imagen del Blog ha cambiado. Llevo días trabajando en ésto (gracias a btemplates donde podemos encontrar gran variedad de templates gratuitas para poner en nuestros blogs) y puede que me haya dejado algún enlace por traspasar. Si notáis que hay algún blog que no aparece en el blogroll, avisarme y lo añadiré.

Además aprovecho para comentar que estoy muy contento con el rumbo que tiene el blog. De momento he recibido bastantes visitas y de muchas partes del mundo!.

Para el año que viene estoy preparando diferentes cambios, y uno de ellos es empezar a publicar en inglés. He notado que no tengo mucho público y quería ampliar horizontes, además me irá bien para ir practicando el idioma.

No dudéis en dejar un comentario para saber vuestra opinión!.

Educating world citizens for the 21st Century

No puedo dejar pasar éste fantástico documental de redes donde aparecen extractos de la última conferencia celebrada en Washington D.C sobre "Educando ciudadanos del mundo para el siglo 21". En la web www.educatingworldcitizens.org podréis encontrar mucha más información sobre el evento tan importante que se celebró en octubre.





source:

http://www.redesparalaciencia.com/1784/redes/2009/redes-49-educar-para-fabricar-ciudadanos

Blogger Backup

Hace poco leí un post de Jose manuel beas en se hace camino al andar, donde hace poco google le robó el blog (por un error en un falso positivo en los robots de búsqueda). Y esperando que eso no me pase nunca a mí, he decidido hacer un backup de mi blog.

Buscando por la red, he encontrado diversas opciones e incluso blogger ofrece una exportación del contenido desde el escritorio. Pero al final me he decidido por la aplicación Blogger Backup de codeplex.com, una herramienta sencilla y gratuita que permite conectarte a tu blog y descargarse el contenido vía fed y guardar los artículos en formato XML.


De ésta manera podemos recuperar nuestros artículos si es que algún día nos pasa algo parecido y no podemos acceder a nuestro contenido o nos tenemos que mover a otro blog.


  • Enlaces de interés:
Se hace camino al andar.
Easy restoration.
Simple way to backup a content.

Force Directed Graphs part II

Aquí os dejo un enlace muy interesante sobre un motor creado en javascript que permite ordenar los diagramas utilizando Force-Directed. El trabajo realizado por Kyle Scholz es increíble. Mucha gente está utilizando su algoritmo para crear diversas estructuras dinámicas vía Web.

La utilización de su motor es bastante sencillo y con solo importar sus librerías ya podemos empezar a crear los diagramas a través de código javascript.

En el siguiente enlace podemos encontrar la información necesaria para crear los diagramas. Además os dejo un enlace para que podáis ver un ejemplo online.

Os recomiendo mirar su proyecto WordNet que implementa su motor Force-Directed. No tiene desperdicio:


Processing 1.0

Continuando con el tema del día, he encontrado una aplicación muy interesante para el procesado de imágenes. Ésta aplicación Open Source llamada Processing 1.0 permite a través de código similar al java crear diversas aplicaciones donde la parte gráfica ya está implementada y solo nos tenemos que preocupar del código. Creo que es bastante interesante para estudios científicos ya que permite a la persona que está al otro lado centrarse en la parte importante del algoritmo sin tener que preocuparse de los diferentes eventos que pueden aparecer en una aplicación gráfica. Aunque la aplicación pesa unos 70 Mb (la versión para windows), dispone de muchos ejemplos y documentación para empezar a generar diagramas y tratar imágenes fácilmente.

Además el IDE es bastante amigable con una codificación como la de java y un código exportable.

En la misma web del autor (Ben Fry y Casey Reas) encontraremos mucha información sobre éste lenguaje de programación para un contexto visual.