Ver Mensaje Individual
  #3  
Antiguo 23-12-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Reputación: 11
aguml Va por buen camino
Buscando info leí que para saber la relacion hay que tener dos valores: relacion en pixeles por pulgada de la imagen, y ancho/alto imagen.
Lo primero era saber los ppp del bmp usando codigo puro y duro. Para ello busqué más información y pude obtener esto:

Código PHP:
bool LoadPPPBMP intwidthintheightlongresHlongresVchar *bmpfile )
{
   
BITMAPFILEHEADER bmpheader;
   
BITMAPINFOHEADER bmpinfo;
   
DWORD bytesread;

   
HANDLE file CreateFile bmpfile GENERIC_READFILE_SHARE_READ,
         
NULLOPEN_EXISTINGFILE_FLAG_SEQUENTIAL_SCANNULL );
   if ( 
NULL == file )
        return 
false;

   if ( 
ReadFile file, &bmpheadersizeof BITMAPFILEHEADER ),
        &
bytesreadNULL ) == false )
   {
        
CloseHandle file );
        return 
false;
   }

   if ( 
ReadFile file, &bmpinfosizeof BITMAPINFOHEADER ),
        &
bytesreadNULL ) == false )
   {
        
CloseHandle file );
        return 
false;
   }

   if ( 
bmpheader.bfType != 'MB' )
   {
        
CloseHandle file );
        return 
false;
   }

   *
width   bmpinfo.biWidth;
   *
height  abs bmpinfo.biHeight );
   *
resH bmpinfo.biXPelsPerMeter;
   *
resV bmpinfo.biYPelsPerMeter;

   
CloseHandle file );
   return 
true;

Con esa funcion obtengo los pixeles por metro y necesito los pixeles por pulgadas y para ello hago esto:

Código PHP:
void __fastcall TForm2::ObtenerDimensionesPapel(int &maxHeightint &maxWidthcharpath)
{   
   
int xy;
   
long resHresV;
   
bool retval LoadPPPBMP ( &x, &y, &resH, &resVpath);

   
//Para calcular los pixeles por pulgadas (ppp) resX y resV tienen el valor de relacion en pixeles por metro
   //asi que multiplico el valor de una pulgada entre 100 y multiplico el resultado por el valor en ppm
   
int pppX resH * (2.54 100);
   
int pppY resV * (2.54 100);

   
//En VividReport1->PageUHeight y PageUWidth está el tamaño del papel en mms y lo 
   //divido entre 10 para pasarlo a cms
   
maxHeight = (VividReport1->PageUHeight 10) * pppX 2.54;
   
maxWidth = (VividReport1->PageUWidth 10) * pppY 2.54;

Una vez he obtenido los ppp ya se ve como obtengo la relacion y obtengo correctamente los ppp pero la relacion no me da lo que deviese ya que por ejemplo para maxHeight en A4 me da unos 1100 haciendo pruebas pero con las funciones obtengo unos 595.27. Si pongo al componente VividReport1 para que trabaje con la unidad Points me pone en PageUHeight justo ese valor y el ancho tambien coincide ¿que hago mal? Esto me tiene loco.
Os pongo los enlaces que me han ayudado a comprender un poco este lio.
Obtener info del header del bmp: http://tipsandtricks.runicsoft.com/C...pTutorial.html
Obtener formula para relacion: http://www.digitalfotored.com/imagen...tospulgada.htm
Responder Con Cita