7

Estoy trabajando en una aplicación de Midlet. Me encuentro en la necesidad de escalar imágenes muy a menudo. Esto se ha convertido en un problema porque algunos teléfonos son bastante lentos y la ampliación lleva demasiado tiempo.Java - Necesito un algoritmo de escalado de imagen muy rápido

Actualmente estoy usando Image.createRGBImage (int, int, int, boolean) para escalar la imagen.

Me preguntaba si alguno de ustedes conocía una manera muy eficiente y rápida de escalar una imagen.

Nota: esta es una aplicación Midlet por lo que solo está disponible JavaME, lo que significa que no tengo acceso a otras bibliotecas disponibles en la versión completa de Java.

Nota2: la mayor parte de mi escalamiento se realiza de imágenes pequeñas a grandes, aunque también reduzco la escala de la imagen.

+1

¿De qué tamaño está hablando? ¿el% de cambio es arbitrario o algún múltiplo simple (como 2x)? –

+0

una forma de optimizar es usar mipmapping: http://www.3drender.com/glossary/mipmapping.htm – appas

+0

El tamaño de la escala es arbitrario. Digamos que mi imagen es 100 px por 65 px. Necesito escalarlo al tamaño que desee. Digamos 200px por 500px, o 1200px por 10px. Por lo tanto, debe ampliarse o reducirse vertical u horizontalmente, y/o cualquier combinación de ambos. – Tony

Respuesta

29

Tenga en cuenta que siempre hay una relación entre la velocidad y la calidad de imagen cuando se discuten los algoritmos de escala, y la solución ideal para su caso podría requerir algunas investigaciones y pruebas.

Nearest neighbor es la aplicación más sencilla y rápida de escalado de imagen.

Hay una buena introducción a la escala/cambio de tamaño de la imagen en Coding Horror que repasa un par de técnicas y compara su calidad.

Imagino que está trabajando con un dispositivo de visualización muy pequeño, por lo que la calidad de imagen realmente no importa al final. Algunas personas llaman a thisla implementación de escalamiento de imagen más rápida para J2ME.

Pero si está dispuesto a leer algunas otras cosas, this paper presenta un algoritmo de bajo costo (que significa "muy rápido") para escalar que mejora significativamente la interpolación del vecino más cercano. Hay un código fuente disponible, y también presentan una evolución de esa investigación here.

Por último, pero no menos importante, cvResize() de OpenCV (biblioteca de código abierto/multiplataforma para el procesamiento de imágenes). La gente en willow garage son bastante buenos para hacer procedimientos rápidos para el procesamiento de imágenes/video, y esta función proporciona un par de técnicas para escalar, por lo que podría valer la pena verificar su implementación.

+1

Gracias. Actualmente estoy usando la técnica que describes en tu enlace: "Algunas personas llaman a esto la implementación más rápida de escalado de imágenes para J2ME". Revisaré las otras técnicas y realizaré algunas pruebas para ver si obtengo una escala más rápida. Aprobado por su excelente respuesta. Los puntos van a ti. Gracias Karl. – Tony

Cuestiones relacionadas