home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fresh Fish 7
/
FreshFishVol7.bin
/
bbs
/
text
/
pastex-1.3-1of8.lha
/
PasTeX
/
src
/
SpecialHost
/
BlitScale.c
next >
Wrap
Text File
|
1991-04-10
|
2KB
|
71 lines
/****************************************************************************
*
* 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);
}