Club Delphi  
    Paypal   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 28-03-2015
jesusgandia1966 jesusgandia1966 is offline
Miembro
 
Registrado: mar 2015
Posts: 38
Poder: 0
jesusgandia1966 Va por buen camino
Esta función no obtiene la información de si la imagen es de 32, 24, 16 o 8 bits.
El valor obtenido no corresponde con lo mencionado en el post.
Pueden comprobarlo ustedes mismos.
Deje en un post mas arriba lo que quiero y lo que quiero es consultar un fichero JPG directamente en el archivo y comprobar si es de 32 bits, 24, 16 o 8 bits.
Tal como cuando hace Windows con las propiedades del fichero, que si es de IMAGEN muestra dichos valores de forma muy directa.
Responder Con Cita
  #2  
Antiguo 28-03-2015
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.671
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
¿Puedes poner tu código?
Responder Con Cita
  #3  
Antiguo 28-03-2015
jesusgandia1966 jesusgandia1966 is offline
Miembro
 
Registrado: mar 2015
Posts: 38
Poder: 0
jesusgandia1966 Va por buen camino
Supuestamente el valor Read, obtiene el valor de los Bits de color.
Esto está cogido basándose en el código sugerido mas arriba puesto por otros foreros.
El código está en Delphi, pero en C++ es muy parecido.
Este código no funciona:

Código:
    	String Fichero = fV->SV->DatSetPCRutaTPV_Ncr + "Imagenes\\Logo.jpg";
        TJPEGImage* Imagen_JPG = new TJPEGImage();
        TMemoryStream *StreamTmp = new TMemoryStream;

        Imagen_JPG->LoadFromFile(Fichero.w_str());
        Imagen_JPG->SaveToStream(StreamTmp);

        wchar_t buffer[1024];
        StreamTmp->Read(buffer, 0);
        INT COLOR = buffer[0] * 8;

        ShowMessage(COLOR);
Responder Con Cita
  #4  
Antiguo 28-03-2015
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.671
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
¿Y en qué parte de ese código se leen los datos de la imagen?
Responder Con Cita
  #5  
Antiguo 28-03-2015
jesusgandia1966 jesusgandia1966 is offline
Miembro
 
Registrado: mar 2015
Posts: 38
Poder: 0
jesusgandia1966 Va por buen camino
Código:
wchar_t buffer[1024];
        StreamTmp->Read(buffer, 0);
        INT COLOR = buffer[0] * 8;
Responder Con Cita
  #6  
Antiguo 28-03-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
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 Jesus.

Código PHP:
bool getJpegsize(TMemoryStream *jpegint &widthint &heightint &bitDepth) {
  
int n;
  
unsigned char b;
  
unsigned int w;
  
bool result false;

  
jpeg->Size;
  
jpeg->Position 0;
  if (
<= 0) return false;
  
jpeg->Read(&w2);
  if ( 
0xD8FF ) return false;
  
jpeg->Read(&b1);
  while (
jpeg->Position && b==0xFF) {
    
jpeg->Read(&b1);
    switch(
b) {
      case 
0xC0: case 0xC1: case 0xC2: case 0xC3: {
        
jpeg->Seek(3soFromCurrent);
        
jpeg->Read(&w2);
        
height = (w&0xFF)<<8|(w&0xFF00)>>8;
        
jpeg->Read(&w2);
        
width =  (w&0xFF)<<8|(w&0xFF00)>>8;
        
jpeg->Read(&b1);
        
bitDepth 8;
        return 
true;
      }; break;
      case 
0xFFjpeg->Read(&b1); break;
      case 
0xD0: case 0xD1: case 0xD2: case 0xD3: case 0xD4:
      case 
0xD5: case 0xD6: case 0xD7: case 0xD8: case 0xD9: {
        
jpeg->Seek(1soFromCurrent);
        
jpeg->Read(&b1);
      };
      default: {
        
jpeg->Read(&w2);
        
jpeg->Seek(((w&0xFF)<<8|(w&0xFF00)>>8)-2soFromCurrent);
        
jpeg->Read(&b,1);
      }; break;
    }
  }

Ejemplo de uso:
Código PHP:
void __fastcall TForm1::Button1Click(TObject *Sender){
  if (
OpenDialog1->Execute()) {
    
TMemoryStream *ms = new TMemoryStream;
    
int w,h,d;

    
ms->LoadFromFile(OpenDialog1->FileName);
    
getJpegsize(mswhd);
    
delete ms;
    
ShowMessage("Width: "+IntToStr(w)+
                
"\nHeight: "+IntToStr(h)+
                
"\nDepth: "+IntToStr(d));
  }

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 28-03-2015
jesusgandia1966 jesusgandia1966 is offline
Miembro
 
Registrado: mar 2015
Posts: 38
Poder: 0
jesusgandia1966 Va por buen camino
Muchas gracias por tu aporte, lo probaré y te digo.
Responder Con Cita
  #8  
Antiguo 28-03-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
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 Jesus.
Cita:
Empezado por jesusgandia1966 Ver Mensaje
Esta función no obtiene la información de si la imagen es de 32, 24, 16 o 8 bits.
El valor obtenido no corresponde con lo mencionado en el post.
Pueden comprobarlo ustedes mismos.
Deje en un post mas arriba lo que quiero y lo que quiero es consultar un fichero JPG directamente en el archivo y comprobar si es de 32 bits, 24, 16 o 8 bits.
Tal como cuando hace Windows con las propiedades del fichero, que si es de IMAGEN muestra dichos valores de forma muy directa.
No había leido este mensaje.

Te comento que en mis pruebas, la información que muestra la función traducida, se corresponde con la obtenida en el explorador de windows en las propiedades del archivo.

De todos modos se me ocurrió que también podrías probar de este modo:
Código PHP:
TPixelFormat getColorbit(const char* &fileName) {
  
TPixelFormat pf;

  
Graphics::TBitmap *bmp = new Graphics::TBitmap;
  
TJPEGImage *jpg = new TJPEGImage;
  
jpg->LoadFromFile(fileName);
  
bmp->Assign(jpg);
  
pf bmp->PixelFormat;
  
delete jpg;
  
delete bmp;

  return 
pf;

Ej. de llamada:
Código PHP:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  if (
OpenDialog1->Execute())
    switch (
getColorbit(OpenDialog1->FileName.c_str())) {
      case 
pfDeviceShowMessage("Device-dependant bitmap");break;
      case 
pf1bit  ShowMessage("One bit per pixel");break;
      case 
pf4bit  ShowMessage("Uses a 16-color palette");break;
      case 
pf8bit  ShowMessage("Uses a 256color palette"); break;
      case 
pf15bit ShowMessage("uses 15 bits per pixel (RGB compression)"); break;
      case 
pf16bit ShowMessage("uses 16 bits per pixel (bitfield compression)"); break;
      case 
pf24bit ShowMessage("uses 24 bits per pixel"); break;
      case 
pf32bit ShowMessage("uses 32 bits per pixel (RGB compression)"); break;
      case 
pfCustomShowMessage("TBitmap does not support pfCustom"); break;
    }

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 29-03-2015
jesusgandia1966 jesusgandia1966 is offline
Miembro
 
Registrado: mar 2015
Posts: 38
Poder: 0
jesusgandia1966 Va por buen camino
El problema es que con este código cuando la imagen JPG es de 32 bits de color sucede un error al asignárselo al TBitmap en la siguiente LINEA:
Código:
bmp->Assign(jpg);//Salta una excepción si la IMANGEN DEL jpg es de 32 bits de color
Sin embargo la solución de "ecfisa" funciona perfectamente en todos los casos.
MUCHISIMAS GRACIAS A TODOS, habéis aportado mucho a mi problema en la resolución.
GRACIAS, GRACIAS y GRACIAS.

Última edición por jesusgandia1966 fecha: 29-03-2015 a las 03:44:05. Razón: Agradecimiento
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
Obtener datos de un fichero PDF Lourdes.Fdez Varios 7 03-02-2010 23:51:57
obtener fechas fichero meme C++ Builder 2 27-10-2007 16:12:05
Obtener un fichero adjunto a un nodo de un fichero XML muntasil Internet 0 18-07-2006 12:57:57
Obtener info de bateria igest2000 Varios 3 19-01-2006 23:25:41
Obtener INfo del la BIOS Enan0 API de Windows 3 04-05-2005 14:48:20


La franja horaria es GMT +2. Ahora son las 08:33:03.


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