Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Dividir imagen en tamaño definido (https://www.clubdelphi.com/foros/showthread.php?t=87327)

aguml 15-12-2014 16:59:09

Dividir imagen en tamaño definido
 
Pues eso amigos, me he basado en lo que hizo el amigo Neftali y tengo esto:
Código PHP:

int ContarDivisionesImagenAnsiString rutaint maxWidthint maxHeight)
{
   
//Solicito memoria para el bitmap que contendrá el concatenado de imagenes
   
Graphics::TBitmap *bmp = new (nothrowGraphics::TBitmap();
   
int divisiones 0;

   if(
bmp != NULL)
   {
      
bmp->LoadFromFile(ruta);

      
int TotalWidth bmp->Width maxWidth;
      
int TotalHeight bmp->Height maxHeight;

      while( 
TotalWidth 0)
      {
         
TotalWidth -= maxWidth;
         
divisiones++;
      }
      while( 
TotalHeight 0)
      {
         
TotalHeight -= maxHeight;
         
divisiones++;
      }
      
delete bmp;
   }else{
      
divisiones = -1;
   }
   return 
divisiones;


El problema que tengo es que no me devuelve el numero de divisiones correcto. ¿que hago mal?

aposi 15-12-2014 17:28:51

Hola, lo que tienes que hacer es dos contadores de divisiones
uno para las divisiones del ancho y otro para el alto.
una vez finalizado el resultado es la multiplicacion de los dos contadores (si uno de los contadores es cero el resultado es el otro contador).

si la imagen es de 100x100 y el maximo es 50x50 los contadores seran 2 de ancho por 2 de alto Resultado = 4
si la imagen es de 100x50 y el maximo es 50x50 los contadores seran 2 de ancho por 0 de alto Resultado = 2
si la imagen es de 100x150 y el maximo es 50x50 los contadores seran 2 de ancho por 3 de alto Resultado = 6

aguml 15-12-2014 17:40:02

y en tu caso, si la imagen de de 100*45 tendria que darme que es de 2 ¿no?

aposi 15-12-2014 17:52:47

correcto
si la imagen es de 100x45 y el maximo es 50x50 los contadores seran 2 de ancho por 0 de alto Resultado = 2

aposi 15-12-2014 18:06:56

El codigo tiene que quedar así:

Código PHP:

int ContarDivisionesImagenAnsiString rutaint maxWidthint maxHeight)
{
   
//Solicito memoria para el bitmap que contendrá el concatenado de imagenes
   
Graphics::TBitmap *bmp = new (nothrowGraphics::TBitmap();
   
int divisiones 0;
   
int divisionesWidth 0;
   
int divisionesHeight 0;
   if(
bmp != NULL)
   {
      
bmp->LoadFromFile(ruta);

      
int TotalWidth bmp->Width maxWidth;
      
int TotalHeight bmp->Height maxHeight;

      while( 
TotalWidth 0)
      {
         
TotalWidth -= maxWidth;
         
divisionesWidth++;
      }
      while( 
TotalHeight 0)
      {
         
TotalHeight -= maxHeight;
         
divisionesHeight++;
      }
      
delete bmp;
      if 
divisionesHeight != {
           if 
divisionesWidth != {
              
divisiones divisionesHeight divisionesWidth;
          }else {
             
divisiones =  divisionesHeight;  
          }
      }else { 
             
divisiones divisionesWidth;
     }
    
   }else{
      
divisiones = -1;
   }
   return 
divisiones;



aguml 15-12-2014 18:52:39

Bueno ya lo solucioné aunque yo la comprobacion con 0 no la hago ya que la imagen no puede tener 0 ni de ancho ni de alto. Muchas gracias.
Asi quedó la mia:
Código SQL [-]
int ContarDivisionesImagen( AnsiString ruta, int maxWidth, int maxHeight)
{
   //Solicito memoria para el bitmap que contendrá el concatenado de imagenes
   Graphics::TBitmap *bmp = new (nothrow) Graphics::TBitmap();
   int divisionesHeight=0, divisionesWidth=0, divisiones=0;

   if(bmp != NULL)
   {
      bmp->LoadFromFile(ruta);

      int TotalWidth = bmp->Width;
      int TotalHeight = bmp->Height;

      while( TotalWidth > 0)
      {
         TotalWidth -= maxWidth;
         divisionesWidth++;
      }
      while( TotalHeight > 0)
      {
         TotalHeight -= maxHeight;
         divisionesHeight++;
      }
      divisiones = divisionesHeight * divisionesWidth;
      delete bmp;
   }else{
      divisiones = -1;
   }
   return divisiones;
}

aposi 16-12-2014 22:04:10

La comprovación de 0 no es por si la imagen tiene 0 de alto o ancho, es por si el alto o el ancho no se tiene que dividir
si una imagen tiene 75 de ancho y el ancho màximo es 80 el numero de divisiones de ancho sera 0 y si multiplicas por el numero de divisiones del alto, el resultado te va a dar 0.

Código PHP:

if divisionesHeight != {
           if 
divisionesWidth != {
              
divisiones divisionesHeight divisionesWidth;
          }else {
             
divisiones =  divisionesHeight;  
          }
      }else { 
             
divisiones divisionesWidth;
     } 

esta parte evita multiplicaciones con 0

aguml 16-12-2014 23:09:12

si te fijas, en tu ejemplo restabas al principio el ancho y alto maximo y yo no lo hago con lo que como minimo dará 1 y al multiplicar no hay problema.


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

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