pngwriter in 8bits image

Help
JuanPablo
2008-11-15
2013-04-23
  • JuanPablo
    JuanPablo
    2008-11-15

    hi,
      I have an image in 8 bit depth and ".read" method return valors 0-65535.
    how can obtened the 8 bit valor ?

    thanks.

     
    • Paul Blackburn
      Paul Blackburn
      2008-11-15

      Hi,

      I'm not sure if I understand your question.

      The values read() returns are from 0 to 65535. If you need this as a number form 0 to 255, just divide by 256.

      By the way, if spanish is your native language, we can switch over.

      Paul

       
    • JuanPablo
      JuanPablo
      2008-11-22

      muchas gracias por la ayuda.
      otra pregunta
      trasforme un imagen de rgb a escala de grises
      gris=r/256*0.3 + g/256*0.59 + b*0.11/256;
      ahora ¿como puedo mostrar esta imagen en gris atravez de tu funcion plot que escribe en rgb?
      probe
      image.plot(x,y,gris,gris,gris)
      pero no me muestra algo parecido a la imagen original

      gracias

       
      • Paul Blackburn
        Paul Blackburn
        2008-11-22

        Veamos si entendí bien.

        Con read() obtuviste los coeficientes de color para el rojo, el verde y el azul, que van de 0 a 65535.

        Los dividiste por 256 para obtener valores que van de 0 a 256.

        Aplicaste una ponderación al rojo, verde y azul para hacer la transferencia a escala de grises a tu modo.

        Ahora quieres volver a plotear cada pixel en gris, con esta nueva ponderación.

        El pseudocódigo que me muestras debería hacer precisamente eso.

        Saludos,

        p.

         
    • JuanPablo
      JuanPablo
      2008-11-22

      un ejemplo mas concreto
      estoy usando esta imagen
      http://img403.imageshack.us/my.php?image=entradaik8.png
      con este codigo

      #include<pngwriter.h>
      int main(){
              int i,j;
              float r,g,b, gris;
              pngwriter image(1,1,0,"i.png");
              pngwriter image_nueva(400,400,1.0,"salida.png");
              image.readfromfile("entrada.png");
              for( i=0;i<400;i++){
                      for( j=0;j<400;j++){
                              r=image.read(i,j,1);
                              g=image.read(i,j,2);
                              b=image.read(i,j,3);
                              gris=r/256*0.3 + g/256*0.59 + b/256*0.11;
                              image_nueva.plot(i,j,gris,gris,gris);

                      }  
              }  
              image_nueva.close();
      }

      y solo obtengo una imagen blanca como salida
      alguna sugerencia ?

       
      • Paul Blackburn
        Paul Blackburn
        2008-11-22

        Has mirado directamente el valor de 'gris' para cada pixel? Qué rango tiene?

        p.

         
        • JuanPablo
          JuanPablo
          2008-11-22

          algunos valores por orden
          0
          68.8
          69.2
          69.39
          69.6
          69.69
          69.79
          69.9
          70
          70.19
          ....
          195.98
          196.09
          196.11
          196.2
          196.28
          196.39

           
          • Paul Blackburn
            Paul Blackburn
            2008-11-22

            Del manual:

            "Plotear

            [...] Al igual como sucede con muchas funciones en PNGwriter, esta función ha sido sobrecargada para aceptar argumentos tipo int o double para los coeficientes de color. Si son  de tipo int, van desde 0 a 65535. Si son de tipo double, van desde 0.0 hasta 1.0.

            [...] Sugerencia: Si tratas de plotear con un coeficiente de color fuera de rango, se asumirá un coeficiente de color máximo o mínimo, de acuerdo al coeficiente usado. Por ejemplo, el intentar plotear plot(x, y, 0.5, -0.2, 3.7) lo hará usando 0.0 para el coeficiente verde y 1.0 para el coeficiente azul."

            Dado que los valores de 'gris' están sobre 1.0, la imagen resultante es completamente blanca.

            p.

             
    • JuanPablo
      JuanPablo
      2008-11-22

      ya, ahora si

      el gris se movia entre 0 y 255, asiq los volvi a dividir por 256 para mover los valores de 0 a 1
      gris=(r/256*0.3 + g/256*0.59 + b/256*0.11)/256;

      muchas gracias
      y gracias por la libreria muy util y simple

       
      • Paul Blackburn
        Paul Blackburn
        2008-11-22

        De nada, y suerte con tu proyecto!

        p.