home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fonts 1 / freshfonts1.bin / programs / amiga / pastex / src / specialhost / blitscale.c next >
Text File  |  1991-04-11  |  2KB  |  71 lines

  1. /****************************************************************************
  2. *
  3. *    BltScale.c - ResizeBitMap
  4. *
  5. *    Copyright © 1991 by Olaf `Olsen' Barthel, zur Nutzung im Rahmen
  6. *    des PasTeX-Paketes freigegeben.
  7. *
  8. ****************************************************************************/
  9.  
  10.     /* ResizeBitMap():
  11.      *
  12.      *    Eine sehr simple auf dem Blitter basierende Funktion,
  13.      *    die den Inhalt einer BitMap skaliert und in eine anderen
  14.      *    BitMap ablegt. Vorsicht: sehr speicherhungrig!
  15.      */
  16.  
  17. BYTE
  18. ResizeBitMap(struct BitMap *Src,struct BitMap *Dst,LONG SrcWidth,LONG SrcHeight,LONG DstWidth,LONG DstHeight)
  19. {
  20.     LONG         i;
  21.     struct BitMap    *Tmp;
  22.     BYTE         Success = FALSE;
  23.  
  24.         /* Speicher für temporäre BitMap anfordern... */
  25.  
  26.     if(Tmp = AllocMem(sizeof(struct BitMap),MEMF_PUBLIC|MEMF_CLEAR))
  27.     {
  28.             /* BitMap initialisieren. */
  29.  
  30.         InitBitMap(Tmp,1,DstWidth,SrcHeight);
  31.  
  32.             /* Speicher für erste BitPlane anfordern. */
  33.  
  34.         if(Tmp -> Planes[0] = (PLANEPTR)AllocMem(Tmp -> BytesPerRow * Tmp -> Rows,MEMF_CHIP))
  35.         {
  36.                 /* Ab dieser Stelle ist die Routine schon
  37.                  * weitestgehend erfolgreich gewesen, an-
  38.                  * schließend wird skaliert!
  39.                  */
  40.  
  41.             Success = TRUE;
  42.  
  43.                 /* Die Quell-BitMap wird Spaltenweise auf die Breite
  44.                  * der Zielbitmap reduziert.
  45.                  */
  46.  
  47.             for(i = 0 ; i < DstWidth ; i++)
  48.                 BltBitMap(Src,(i * SrcWidth) / DstWidth,0,Tmp,i,0,1,SrcHeight,0xC0,~0,NULL);
  49.  
  50.                 /* Die temporäre BitMap wird Zeilenweise auf die Höhe der
  51.                  * Zielbitmap reduziert.
  52.                  */
  53.  
  54.             for(i = 0 ; i < DstHeight ; i++)
  55.                 BltBitMap(Tmp,0,(i * SrcHeight) / DstHeight,Dst,0,i,DstWidth,1,0xC0,~0,NULL);
  56.  
  57.                 /* Speicher der temporären BitPlane freigeben. */
  58.  
  59.             FreeMem(Tmp -> Planes[0],Tmp -> BytesPerRow * Tmp -> Rows);
  60.         }
  61.  
  62.             /* Speicher der temporären BitMap freigeben. */
  63.  
  64.         FreeMem(Tmp,sizeof(struct BitMap));
  65.     }
  66.  
  67.         /* (Miß-)Erfolg zurückmelden. */
  68.  
  69.     return(Success);
  70. }
  71.