2012-06-13 10 views
5

Así que he creado este programa para un juego y necesito ayuda para hacerlo un poco más automático.C++ Image Manipulation

El programa toma una imagen y luego la muestra. Estoy haciendo esto sobre texturas en OpenGL. Cuando tomo la captura de pantalla del juego, suele ser algo así como 700x400. Ingresé la altura y el ancho en mi programa, cambio el tamaño de la imagen a 1024x1024 (convirtiéndola en una textura POT para una mejor compatibilidad) agregando espacio en blanco (la imagen original se queda en la esquina superior izquierda y llega hasta (700,400) y el el resto está en blanco, ¿alguien sabe el término para esto?) y luego lo carga en mi programa y ajusta las esquinas para que solo se muestre la parte de (0,0) a (700,400).

Así es como manejo la visualización de la imagen. Ahora, me gustaría hacer esto automático. Así que tomaría una imagen de 700x400, la pasaría al programa que obtendría el ancho y alto de la imagen (700x400), lo redimensionaría a 1024x1024 agregando espacio en blanco y luego lo cargaría.

Entonces, ¿alguien sabe una biblioteca C++ capaz de hacer esto? Todavía estaría tomando la captura de pantalla manualmente.

Estoy usando la Librería de Imágenes Simple OpenGL (SOIL) para cargar la imagen (.bmp) y convertirla en una textura.

Gracias!

Respuesta

1

No tiene que cambiar el tamaño agregando espacio en blanco para mostrar la imagen correctamente. De hecho, es una forma realmente ineficaz de hacerlo, especialmente porque almacena imágenes en formato .bmp.

SOIL puede agregar automáticamente el espacio en blanco al cargar texturas; quizás solo intente cargar el archivo tal cual, sin realizar ninguna operación.

del suelo Documentación:

Puede cambiar la escala de la imagen automáticamente para el siguiente tamaño más grande de potencias de dos

puede cargar texturas rectangluar de elementos de la GUI o pantallas de inicio (requiere GL_ARB/EXT/NV_texture_rectangle)

De todos modos, no es necesario utilizar la textura para mostrar los píxeles en el s cree. Supongo que no está usando sombreadores para renderizar; si todo pasa por una tubería fija, existe la función glDrawPixels, que será mucho más simple. Solo recuerde cambiar su llamada SOIL al SOIL_load_image.

+0

"Se puede cambiar automáticamente la escala de la imagen al siguiente tamaño más grande de la potencia de dos" - Realmente extrañaba la palabra "automáticamente". : D Voy a intentar lo que dijiste. ¡Gracias! – Tuntuni

+0

He intentado cargarlo sin cambiar el tamaño, pero resulta extraño. Estoy bastante seguro de que mis rincones están en su lugar. La imagen también se vuelve en escala de grises y, a medida que lo escala, recupera parte del color. ¿Podría darme cualquier modelo de SOIL_load_image y glDrawPixels, o un enlace? Gracias. – Tuntuni

+0

Quizás intente 'SOIL_FLAG_POWER_OF_TWO' o' SOIL_FLAG_TEXTURE_RECTANGLE'. –