Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Explicación de código

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Explicación de código Responder citando

Hola amig@s...bueno no tengo muy claro lo que hace un trozo del código con el que estoy trabajando....a ver si ustedes me lo pueden explicar...

El codigo lo que hace es leer de un fichero..pero lo que no me queda claro es en que forma lo almacena....y eso es lo que espero me expliquen..

Las declaraciones son las siguientes:

Código:

// Imagenes
        char* Imagen1;
        char* Imagen2;


La reserva de memoria la hace de esta forma...lo primero que hace es leer una cabecera dentro del archivo de un tamaño fijo donde entre otros datos se indica el numero de filas y de columnas.

Código:

if (( this->Imagen1 = (char *) malloc(sizeof(char)*this->NCol*this->NFilas)) == NULL) {
                Eventos.Eventos("No hay memoria suficiente para procesar las imagenes");
                return false;
        };
        if (( this->Imagen1 = (char *) malloc(sizeof(char)*this->NCol*this->NFilas)) == NULL) {
                Eventos.Eventos("No hay memoria suficiente para procesar las imagenes");
                return false;


Ahora pasamos a leer las imágenes..y esto es lo que no termino de entender..como las guarda en la variable para la que hemos reservado espacio en memoria.

Código:

char Aux;

for (int i = 0; i < this->NFilas ; i++) {
                for (int j = 0; j < this->NCol ; j++) {
                        fread(&Aux , sizeof(Aux) , 1 , Archivo);
                        *(this->Imagen1 + (i*this->NCol) + j) = Aux;
                };
                for (int j = 0; j < this->NCol; j++) {
                        fread(&Aux , sizeof(Aux) , 1 , Archivo);
                        *(this->Imagen2 + (i*this->NCol) + j) = Aux;
                };
        };


Por si les sirve..una vez que termina de procesar las imagenes....los vuelve a guardar en el mismo formato de la siguiente forma

Código:

for (int i = 0; i < this->NFilas; i++) {
                fwrite(this->Imagen1 + (i*this->NCol) , sizeof(char), this->NColCorre , Archivo);
                fwrite(this->Imagen2 + (i*this->NCol) , sizeof(char), this->NColCorre , Archivo);

        };


Bueno..espero que me puedan ayudar..desde ya muchas gracias

Argone
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Código Responder citando

Hola Argone:

Creo que la clave para interpretar ese fragmento de código está interpretar a Imagen1 y a Imagen2 como arrays bidimensionales de NFilas x NCol; o sea:

char Imagen1[NFilas][NCol];
char Imagen2[NFilas][NCol];

La idea es que un elemento del array bidimensional A[a0][b0] equivale a otro unidimensional, que se referenciaría como U[a0*b+b0]

Espero que te resulte útil.

Alejandro
Volver arriba
Mensaje    Asunto: Responder citando

Lo que dice alejandro es cierto....
tenes que tener en cuenta que por como lo almacenas en un vector unidimencional... lo debes levantar de la mismamanera...
nada mas... Laughing
_________________
Mutar porque nos parece nuevo lo que ya hemos vivido
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Muchas gracias..en efecto..teneis toda la razon....ya lo he probado y en efecto funciona...hasta otra

Argoen
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.