2012-04-23 11 views
8

Aquí está la totalidad de mi código:No se puede guardar la imagen a presentar correctamente con la biblioteca cimg

#include "CImg.h" 
#include <iostream> 

using namespace cimg_library; 
int main() { 

CImg<float> image(100,100,1,3,0); 
const float color[] = {1.0,1.0,0.0}; 
image.draw_point(50,50,color); 
image.save("file.bmp"); 
CImgDisplay local(image, "Hah"); 
while (true) { 
    local.wait(); 
    } 

} 

Esto muestra con éxito lo que cabe esperar en una ventana, es decir, un cuadrado negro completo con un píxel blanco a las 50,50. Sin embargo, file.bmp es simplemente un cuadrado negro, sin ese pixel (y guardando una imagen cimg que se ha modificado con llamadas repetidas al draw_point en un programa más grande que hace algo útil también falla). ¿Que está pasando aqui?

+2

+1 para un programa de ejemplo resumen, completa. Ver http://sscce.org/. –

Respuesta

4

El problema es que crea CImgDisplay con la normalización habilitada. Por lo tanto, su píxel de {1,1,0} está normalizado en {255,255,0} y está visible en su pantalla.

CImg.save no realiza la normalización, por lo que el píxel se guarda en el disco como un píxel muy oscuro.

Puede solucionar el problema cambiando su color de pixel blanco:

const float color[] = {255.,255.,255.}; 

y, opcionalmente, mediante la desactivación de la normalización:

CImgDisplay local(image, "Hah", 0); 

En la alternativa, se podría normalizar la imagen original antes de guardar o mostrarla:

image.draw_point(50,50,color); 
image.normalize(0, 255); 
image.save("file.bmp"); 

Referencias:

+0

Esto fue exactamente, no se estaba normalizando correctamente. ¡Gracias! – Tneuktippa

1

No estoy familiarizado con esta biblioteca, pero este comportamiento aludiría a que CImgDisplay interpreta la imagen de manera diferente al representar.

Esperaría que el color blanco se definiera como const unsigned char color[] = {255,255,255}; para representar valores RGB para el mapa de bits.

Verificaría la documentación de CImg como primer paso.

Cuestiones relacionadas