• Viernes 5 de Julio de 2024, 09:23

Autor Tema:  Problemas Copiando Imagen....  (Leído 2195 veces)

citrico

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Problemas Copiando Imagen....
« en: Domingo 4 de Febrero de 2007, 01:58 »
0
Hola a todos. Estoy haciendo un programa que permita aplicar algoritmos de criptografía a imágenes. Pero tengo un pequeño problema.

Resulta que leeo una imagen de un fichero *.bmp y pretendo almacenarla en memoria para luego procesarla mediante dichos algoritomos.

Antes de aplicar los algoritmos, la leo, la dibujo, la almaceno en memoria y la vuelvo a pintar en otro TImage, pero me aparece en B/N. El código que empleo es el siguiente:

<!--xc1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>XCODE </td></tr><tr><td id='XCODE'><!--exc1-->unsigned char *textura;
     TColor tcolor;
     unsigned char *color = (unsigned char *) &tcolor;
     textura = (unsigned char *) malloc (altoImagen*anchoImagen*3);
     int n = 0;
     for (int i = 0; i < altoImagen; i++) { //escaneo las líneas
          for (int j = 0; j < anchoImagen; j++) {
              tcolor = imagenClaro->Picture->Bitmap->Canvas->Pixels[j][i];
              textura[n]     = GetRValue(tcolor);                
              textura[n + 1] = GetGValue(tcolor);
              textura[n + 2] = GetBValue(tcolor);              
              tcolor = (TColor)RGB(textura[n], textura[n+1], textura[n+2]);
              n++;
              imagenCopia->Canvas->Pixels[j][i] = tcolor;
             //la imágen se pinta bien
          }
     }

     n = 0;
     for (int i = 0; i < altoImagen; i++) {
          for (int j = 0; j < anchoImagen; j++){
              tcolor= (TColor)RGB(textura[n], textura[n+1], textura[n+2]);
              imagenPrueba ->Canvas->Pixels[j][i] = tcolor;
              n++;
             //aquí la imagen se pinta el B/N
          }
    }

    delete textura;<!--xc2--></td></tr></table><div class='postcolor'><!--exc2-->

Creo que el problema está en la composición del color, pero no lo se.

¿me echa alguien una mano? Gracias

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Problemas Copiando Imagen....
« Respuesta #1 en: Lunes 5 de Febrero de 2007, 14:31 »
0
El problema es que no estas llenando bien la textura, de hecho estas dañando la información que vas acumulando en ella y luego la pintas y vuelves y la recorres mal..

En resumen no estas incrementando la variable n sino de 1 por vez y deberías hacerlo de a 3por vez puesto que vas llenandola textura de a 3 , uno para red otro para green otro para blue


<!--xc1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>XCODE </td></tr><tr><td id='XCODE'><!--exc1-->unsigned char *textura;
    TColor tcolor;
    unsigned char *color = (unsigned char *) &tcolor;
    textura = (unsigned char *) malloc (altoImagen*anchoImagen*3);
    int n = 0;
    for (int i = 0; i < altoImagen; i++) { //escaneo las líneas
         for (int j = 0; j < anchoImagen; j++) {
             tcolor = imagenClaro->Picture->Bitmap->Canvas->Pixels[j][i];
             textura[n]     = GetRValue(tcolor);                
             textura[n + 1] = GetGValue(tcolor);
             textura[n + 2] = GetBValue(tcolor);              
             tcolor = (TColor)RGB(textura[n], textura[n+1], textura[n+2]);
             n+=3;
             imagenCopia->Canvas->Pixels[j][i] = tcolor;
            //la imágen se pinta bien
         }
    }

    n = 0;
    for (int i = 0; i < altoImagen; i++) {
         for (int j = 0; j < anchoImagen; j++){
             tcolor= (TColor)RGB(textura[n], textura[n+1], textura[n+2]);
             imagenPrueba ->Canvas->Pixels[j][i] = tcolor;
             n+=3;
            //aquí la imagen se pinta el B/N
         }
   }

   delete textura;<!--xc2--></td></tr></table><div class='postcolor'><!--exc2-->

Por otro lado la manera en que lo hace es la mas fácil pero también la mes lenta, si tienes problemas de performance peganos una visita luego.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

citrico

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Problemas Copiando Imagen....
« Respuesta #2 en: Lunes 5 de Febrero de 2007, 15:31 »
0
Gracias por la respuesta Juank, vaya error más tonto. No me había dado cuenta.

De todas formas, ¿ podrías indicarme brevemente una manera más rápida de hacer esto ?

Muchas gracias !!

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Problemas Copiando Imagen....
« Respuesta #3 en: Lunes 5 de Febrero de 2007, 15:36 »
0
haciendo un lock bits del bitmap que hay en

imagenXXX->Picture->Bitmap

y recorriendo los bytes a travez de un puntero teniendo en cuenta el padding del bmp.

Podemos mirarlo luego ya que no conozco el objeto

imagenXXX->Picture->Bitmap

pero intuyo que debe tener algo para hacer ese tipo de cosas ya que eso es regla general cuando se trabaja haciendo dispay de imagenes.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

citrico

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Problemas Copiando Imagen....
« Respuesta #4 en: Lunes 5 de Febrero de 2007, 16:19 »
0
Que rápido juanK !!! agradecido me quedo.

De todas formas, cuando tengas un poco de tiempo, si fueras un poco más explicito.... es que no me he aclarado con tus últimas explicaciones.

Saludos.

erluiso

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: Problemas Copiando Imagen....
« Respuesta #5 en: Martes 7 de Agosto de 2007, 14:04 »
0
muy buena Juank eso me sirve a mi tambien