Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Gráficos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-09-2014
ErYcK ErYcK is offline
Miembro
NULL
 
Registrado: abr 2012
Posts: 26
Poder: 0
ErYcK Va por buen camino
Leer cabecera de imagen bmp

No estoy seguro de si este es el lugar correcto de este post, pero no sabia muy bien donde ubicarlo y si podriais ayudarme, siempre e trabajado con c++ Builder, pero ahora me ha tocado implicarme a programación a bajo nivel, tengo que crear mis propias librerias, y estoy teniendo problemas con algo aparentemente simple, mi idea es intentar leer una imagen BMP, por cierto trabajo con codelite en linux.

El proelbma es que al intentar leer la cabecera del archivo BMP lo que he encontrado por ahi es que deberia leer los dos bytes de identificación en los cuales deberia encontrar si es cierto que es un BMP "BM" que seria equivalente a 0x4D42 pero al parecer lo que me lee es un numero, que no se realmente que logica tiene, para entender que eso es un archivo BMP, supongon que deberia entender mejor como funciona este formato, pero no consigo entender como se debe de leer.

Si pueden darme alguna idea o pista seria de gran ayuda.

Gracias de antemano, un Saludo!
Responder Con Cita
  #2  
Antiguo 30-09-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola ErYcK.

Verificar si el archivo es un Bitmap:
Código PHP:
bool IsBMPFile(char *filename) {
  
unsigned char buf[2];

  
TFileStream *fs = new TFileStream(filenamefmOpenRead);
  
fs->Read(bufsizeof(buf));
  
fs->Free();
  return 
buf[0]==0x42 && buf[1]==0x4D;
}

/* Llamada de ejemplo */
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  if (
IsBMPFile("Imagen.bmp")) 
    
ShowMessage("Es un archivo Bitmap");

Leer información de la cabecera:
Código PHP:
void GetBmpNfo(char *filenameTStrings *nfo) {
  
TFileStream *Stream = new TFileStream(filenamefmOpenRead);
  
unsigned char buf[2];
  
TBitmapFileHeader fh;
  
TBitmapInfoHeader ih;

  
nfo->Clear();
  
Stream->Read(&fhsizeof(fh));
  
buf[0]=fh.bfType&0xFF;
  
buf[1]=fh.bfType>>8&0xFF;
  if (
buf[0]== 0x42 && buf[1]==0x4D) { 
    
nfo->Add("Type               : " IntToHex(fh.bfType&0xFF,2) +
      
IntToHex(fh.bfType>>8&0xFF,2));
    
nfo->Add("File size          : " String(fh.bfSize));
    
nfo->Add("Ofset              : " String(fh.bfOffBits));
    
nfo->Add("Image size         : " String(ih.biSize));
    
nfo->Add("Width              : " String(ih.biWidth));
    
nfo->Add("Height             : " String(ih.biHeight));
    
nfo->Add("Planes             : " String(ih.biPlanes));
    
nfo->Add("Bit count          : " String(ih.biBitCount));
    
nfo->Add("Bit compression    : " String(ih.biCompression));
    
nfo->Add("Bit X per meter    : " String(ih.biXPelsPerMeter));
    
nfo->Add("Bit Y per meter    : " String(ih.biYPelsPerMeter));
    
nfo->Add("Color index table  : " String(ih.biClrUsed));
    
nfo->Add("Color index display: " String(ih.biClrImportant));
  }
  
Stream->Free();
}

/* Llamada de ejemplo */
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  
GetBmpNfo("Imagen.bmp"ListBox1->Items);

Es claro que si tenes definidas las dos funciones es innecesaria la comprobación del tipo de archivo en la segunda, es decir:
Código PHP:
void GetBmpNfo(char *filenameTStrings *nfo) {
  
TFileStream *Stream = new TFileStream(filenamefmOpenRead);
  
TBitmapFileHeader fh;
  
TBitmapInfoHeader ih;

  
nfo->Clear();
  
Stream->Read(&fhsizeof(fh));
  
nfo->Add("Type               : " IntToHex(fh.bfType&0xFF,2) +
    
IntToHex(fh.bfType>>8&0xFF,2));
  
nfo->Add("File size          : " String(fh.bfSize));
  
nfo->Add("Ofset              : " String(fh.bfOffBits));
  
nfo->Add("Image size         : " String(ih.biSize));
  
nfo->Add("Width              : " String(ih.biWidth));
  
nfo->Add("Height             : " String(ih.biHeight));
  
nfo->Add("Planes             : " String(ih.biPlanes));
  
nfo->Add("Bit count          : " String(ih.biBitCount));
  
nfo->Add("Bit compression    : " String(ih.biCompression));
  
nfo->Add("Bit X per meter    : " String(ih.biXPelsPerMeter));
  
nfo->Add("Bit Y per meter    : " String(ih.biYPelsPerMeter));
  
nfo->Add("Color index table  : " String(ih.biClrUsed));
  
nfo->Add("Color index display: " String(ih.biClrImportant));
  
Stream->Free();
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  
char *fname"Imagen.bmp";
  if (
IsBMPFile(fname))
    
GetBmpNfo(fnameListBox1->Items);

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 30-09-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola de nuevo.

Te pido disculpas , releyendo veo que pasé por alto este comentario de tu mensaje:
Cita:
... por cierto trabajo con codelite en linux .
Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 01-10-2014
ErYcK ErYcK is offline
Miembro
NULL
 
Registrado: abr 2012
Posts: 26
Poder: 0
ErYcK Va por buen camino
No te preocupes, seguro que me sera de ayuda, podre pasarlo a c++ y probarlo a ver que tal. en cuanto tenga algo claro comento.

Gracias un saludo
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Delphi-Word poner imagen en la cabecera del documento Jose Manuel Varios 1 28-12-2013 12:21:16
Leer una imagen que está en un servidor santiago14 Varios 5 23-09-2012 00:42:44
Cómo leer una imagen de una tabla en sql server... ronimaxh Varios 13 26-07-2010 18:40:46
Leer imagen de Access jplj Varios 0 20-03-2009 18:15:53
Leer Codigo de barras desde una imagen angara Gráficos 1 04-09-2006 01:48:08


La franja horaria es GMT +2. Ahora son las 20:07:50.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi