Viernes 8 de Noviembre de 2024, 16:49
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Obtener El Chunk De Datos De Una Imagen.
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Obtener El Chunk De Datos De Una Imagen. (Leído 3257 veces)
Escalona
Miembro activo
Mensajes: 63
Obtener El Chunk De Datos De Una Imagen.
«
en:
Jueves 14 de Diciembre de 2006, 11:24 »
0
Hola me gustaria obtener el chunk de datos de una imagen, que supongo que sera lo mismo que para cualquier tipo de archivo.
Por lo que he visto por ahi tengo ke abrir el archivo en modo binario e ir guardandolo en alguna variable. A ver si podeis guiarme , gracias.
Edito:
Estoy intentandolo de la siguiente manera pero no me deja me lanza error.
Código: Text
ifstream ifs;
ifs.open("c:\\bt.gif",ios::binary);
char* buffer;
int size;
//obtengo el tamaño del fichero
ifs.seekg(0, ios::end);
size = ifs.tellg();
ifs.seekg(0, ios::beg);
//lo asigno a una variable para guardar el chunk
char* img;
ifs.getline(img, size);
así me dice
"Run-Time Check Failure #3 - The variable 'img' is being used without being defined.
"
si le pongo un tamaño fijo a img por ejemplo asi:
Código: Text
ifstream ifs;
ifs.open("c:\\bt.gif",ios::binary);
char* buffer;
int size;
//obtengo el tamaño del fichero
ifs.seekg(0, ios::end);
size = ifs.tellg();
ifs.seekg(0, ios::beg);
//lo asigno a una variable para guardar el chunk
char img[1105];
ifs.getline(img, size); //donde size vale 1105
no me lanza el error, pero no me guarda bien el chunk de datos de la imagen, lo ke me guarda en la variable no corresponde a la imagen.
Tweet
Tiburón Puyol
_.B._
Miembro activo
Mensajes: 88
Re: Obtener El Chunk De Datos De Una Imagen.
«
Respuesta #1 en:
Jueves 14 de Diciembre de 2006, 13:57 »
0
Sip, debes abrir las imágenes como archivos binarios, y leer de todo un encabezado, o de variable en variable (ancho, largo, profundidad, etc.).
Ahora, ¿es una imágen BMP o JPEG? Sus encabezados son distintos.
Dale un
googlazo
para que encuentres el encabezado que buscas, y luego un
fread
te debería servir.
Cualquier cosa vuelve a preguntar, que seguro alguien te responde.
¡A programar!
¡Olmo, dame peras!
www.BernardoLG.net
Escalona
Miembro activo
Mensajes: 63
Re: Obtener El Chunk De Datos De Una Imagen.
«
Respuesta #2 en:
Jueves 14 de Diciembre de 2006, 14:02 »
0
He editado el primer post, a ver que encuentro voy a buscar.
Tiburón Puyol
Eternal Idol
Moderador
Mensajes: 4696
Nacionalidad:
Re: Obtener El Chunk De Datos De Una Imagen.
«
Respuesta #3 en:
Jueves 14 de Diciembre de 2006, 16:50 »
0
Con memoria dinamica:
Código: Text
char *img = (char*)malloc(size);
ifs.getline(img, size);
//usar
free(img);
Nacional y Popular
En mi país la bandera de Eva es inmortal.
Queremos una Argentina socialmente justa, económicamente libre y políticamente soberana.
¡Perón cumple, Evita dignifica!
La mano invisible del mercado me robo la billetera.
Escalona
Miembro activo
Mensajes: 63
Re: Obtener El Chunk De Datos De Una Imagen.
«
Respuesta #4 en:
Viernes 15 de Diciembre de 2006, 11:06 »
0
Bien, muchas gracias por las aclaraciones, ahora ya se que necesito usar malloc para poder usar la variable img, bien hasta ahi me funciona todo, ahora estoy recorriendo el fichero *.jpg abierto en modo binario para guardar su contenido en una variable de la siguiente forma:
Código: Text
ifs.open("c:\\bt.jpg",ios::out | ios::binary);
ifs.seekg(0, ios::end);
size = ifs.tellg();
ifs.seekg(0, ios::beg);
char* img = (char*)malloc(size);
com=0;
do {
ifs.read(buffer, 2048);
bytesLeidos = ifs.gcount();
if (com==0){
strcpy(img,buffer);
}else{
strcat(img,buffer);
}
com++;
} while(bytesLeidos > 0);
Parecía que funcionaba bien, el problema es que llegados a un punto ( cuando el bucle da 3 o 4 vueltas, la variable img inexplicablemente se me vacía, y ya no sigue concatenando al estar vacía. ¿Alguien sabe a que puede deberse???
Tiburón Puyol
Eternal Idol
Moderador
Mensajes: 4696
Nacionalidad:
Re: Obtener El Chunk De Datos De Una Imagen.
«
Respuesta #5 en:
Viernes 15 de Diciembre de 2006, 11:11 »
0
¿str*? Esas son funciones de cadena, para copiar datos binarios usa memcpy.
Nacional y Popular
En mi país la bandera de Eva es inmortal.
Queremos una Argentina socialmente justa, económicamente libre y políticamente soberana.
¡Perón cumple, Evita dignifica!
La mano invisible del mercado me robo la billetera.
Escalona
Miembro activo
Mensajes: 63
Re: Obtener El Chunk De Datos De Una Imagen.
«
Respuesta #6 en:
Viernes 15 de Diciembre de 2006, 11:44 »
0
Ajá gracias, ya estoy copiando con memcpy, pero para concatenar valores binarios como puedo hacerlo?
Tal vez me estoy yendo por las ramas pero esque no he encontrado la forma de cargar el contenido completo del fichero en binario dentro de una variable, de ahí que esté intentandolo poco a poco en bloques de 2048 bytes.
Tiburón Puyol
Eternal Idol
Moderador
Mensajes: 4696
Nacionalidad:
Re: Obtener El Chunk De Datos De Una Imagen.
«
Respuesta #7 en:
Viernes 15 de Diciembre de 2006, 12:34 »
0
Tenes que hacer que el primer parametro de memcpy (el destino) no sea siempre la direccion de comienzo de la memoria reservada (img en este caso) sino esa direccion mas lo ya leido.
Yo haria asi (a grosso modo):
Código: Text
char *img = (char*)malloc(size);
char *img_dst = img;
Entonces cuando copias:
Código: Text
memcpy(img_dst, buffer, 2048);
img_dst += 2048;
Nacional y Popular
En mi país la bandera de Eva es inmortal.
Queremos una Argentina socialmente justa, económicamente libre y políticamente soberana.
¡Perón cumple, Evita dignifica!
La mano invisible del mercado me robo la billetera.
Escalona
Miembro activo
Mensajes: 63
Re: Obtener El Chunk De Datos De Una Imagen.
«
Respuesta #8 en:
Viernes 15 de Diciembre de 2006, 14:17 »
0
Solucionado
Gracias por todas vuestras respuestas pongo el codigo para que veais como al final lo he conseguido, primero el metodo getline no me servia (devuelve una cadena hasta que ve un retorno de linea de manera que no me daba el binario completo) he usado
fread
, y segundo no hacia bien el
malloc
, no alocaba la memoria total que necesitaba, bueno asi lo he hecho y me ha funcionado correctamente:
Código: Text
char * m=(char*)malloc(size*sizeof(char));
if (m==NULL) return 3; //error
fread(m,sizeof(char),size,f); //vuelca el fich a memoria.
Al final mucho más sencillo que todo lo que estaba haciendo como me temia.
Gracias a todos.
Tiburón Puyol
Eternal Idol
Moderador
Mensajes: 4696
Nacionalidad:
Re: Obtener El Chunk De Datos De Una Imagen.
«
Respuesta #9 en:
Viernes 15 de Diciembre de 2006, 15:57 »
0
Ojo, eso esta bien pero si tenes un archivo de 3GB es mejor hacerlo por partes ...
Nacional y Popular
En mi país la bandera de Eva es inmortal.
Queremos una Argentina socialmente justa, económicamente libre y políticamente soberana.
¡Perón cumple, Evita dignifica!
La mano invisible del mercado me robo la billetera.
Escalona
Miembro activo
Mensajes: 63
Re: Obtener El Chunk De Datos De Una Imagen.
«
Respuesta #10 en:
Viernes 15 de Diciembre de 2006, 21:32 »
0
ejeje Sí, lo pensé, el programa slo va a trabajar con archivos de imagenes pequeñas, por lo que no debería tener ningún problema.
Tiburón Puyol
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Obtener El Chunk De Datos De Una Imagen.