/****************************************************************************
*
*	BltScale.c - ResizeBitMap
*
*	Copyright © 1991 by Olaf `Olsen' Barthel, zur Nutzung im Rahmen
*	des PasTeX-Paketes freigegeben.
*
****************************************************************************/

	/* ResizeBitMap():
	 *
	 *	Eine sehr simple auf dem Blitter basierende Funktion,
	 *	die den Inhalt einer BitMap skaliert und in eine anderen
	 *	BitMap ablegt. Vorsicht: sehr speicherhungrig!
	 */

BYTE
ResizeBitMap(struct BitMap *Src,struct BitMap *Dst,LONG SrcWidth,LONG SrcHeight,LONG DstWidth,LONG DstHeight)
{
	LONG		 i;
	struct BitMap	*Tmp;
	BYTE		 Success = FALSE;

		/* Speicher für temporäre BitMap anfordern... */

	if(Tmp = AllocMem(sizeof(struct BitMap),MEMF_PUBLIC|MEMF_CLEAR))
	{
			/* BitMap initialisieren. */

		InitBitMap(Tmp,1,DstWidth,SrcHeight);

			/* Speicher für erste BitPlane anfordern. */

		if(Tmp -> Planes[0] = (PLANEPTR)AllocMem(Tmp -> BytesPerRow * Tmp -> Rows,MEMF_CHIP))
		{
				/* Ab dieser Stelle ist die Routine schon
				 * weitestgehend erfolgreich gewesen, an-
				 * schließend wird skaliert!
				 */

			Success = TRUE;

				/* Die Quell-BitMap wird Spaltenweise auf die Breite
				 * der Zielbitmap reduziert.
				 */

			for(i = 0 ; i < DstWidth ; i++)
				BltBitMap(Src,(i * SrcWidth) / DstWidth,0,Tmp,i,0,1,SrcHeight,0xC0,~0,NULL);

				/* Die temporäre BitMap wird Zeilenweise auf die Höhe der
				 * Zielbitmap reduziert.
				 */

			for(i = 0 ; i < DstHeight ; i++)
				BltBitMap(Tmp,0,(i * SrcHeight) / DstHeight,Dst,0,i,DstWidth,1,0xC0,~0,NULL);

				/* Speicher der temporären BitPlane freigeben. */

			FreeMem(Tmp -> Planes[0],Tmp -> BytesPerRow * Tmp -> Rows);
		}

			/* Speicher der temporären BitMap freigeben. */

		FreeMem(Tmp,sizeof(struct BitMap));
	}

		/* (Miß-)Erfolg zurückmelden. */

	return(Success);
}
