Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Relacion para obtener el tamaño del papel (https://www.clubdelphi.com/foros/showthread.php?t=87359)

aguml 19-12-2014 21:14:44

Relacion para obtener el tamaño del papel
 
Pues eso, que segun la Wikipedia he podido obtener los tamaños mas genericos de papel y los da en mm y para imprimir usando C++Builder tengo estos valores y van bien:

Código PHP:

#define MAXHEIGHTA5 745  //Alto maximo para imprimir en A5
#define MAXWIDTHA5 524   //Ancho maximo para imprimir en A5
#define MAXHEIGHTA4 1080 //Alto maximo para imprimir en A4
#define MAXWIDTHA4 745   //Ancho maximo para imprimir en A4
#define MAXHEIGHTA3 1537 //Alto maximo para imprimir en A3
#define MAXWIDTHA3 1040  //Ancho maximo para imprimir en A3 

y segun la wikipedia:
Código:

B3 = 353mm x 500mm
B4 = 250mm x 353mm
B5 = 176mm x 250mm

segun mis calculos tengo esta relacion de aspecto:

A5:
Código:

Alto: 3,547619047619047619047619047619
Ancho: 3,547619047619047619047619047619

A4:
Código:

Alto: 3,6363636363636363636363636363636
Ancho: 3,547619047619047619047619047619

A3:
Código:

Alto: 3,6595238095238095238095238095238
Ancho: 3,5016835016835016835016835016835

Mi pregunta es ¿en que se basa esa relacion y cual es la relacion correcta para calcular todas correctamente?

aguml 19-12-2014 21:33:04

Segun he leido por ahi eso depende de la resolucion de pantalla y que con esto se obtiene los pixeles por pulgadas:
Código PHP:

int ppxGetDeviceCaps(Printer()->HandleLOGPIXELSX);
int ppyGetDeviceCaps(Printer()->HandleLOGPIXELSY); 

El caso es que he cambiado la resolucion de pantalla por todas las que me permite el pc y los valores de ppx y ppy siempre son 360.
Estoy totalmente perdido, lo que quiero es imprimir un BMP, JPG, o GIF en los diferentes tamaños de papel y saber de antemano si la imagen cabe o no sin redimensionarla para saber si dividirla en varios folios o no.

aguml 23-12-2014 14:31:11

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


La franja horaria es GMT +2. Ahora son las 01:14:11.

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