[comp.sys.amiga] mirror image blits

rokicki@polya.Stanford.EDU (Tomas G. Rokicki) (10/15/89)

You people want to blit mirror image?  Here's some ideas.

First, most obvious solution.  Do a single pixel column at a time.  For
an mxn blit, by d bitplanes, you will need m*d blits, each n words long,
for a total of 3*m*n*d memory references not counting setup (which is
appreciable in this case.)

A slight improvement is to try to do each bit0->bit15 in one blit.
Problem with this is you need one channel to increment and the other
to decrement.  This can be done with modulos, using a width of 1,
providing the width in words times the height of your rectangle is
<= 1024, and that your rectangle spans the entire bitmap.  If these
conditions are met, a total of 16 blits are all that is required.

Best, though, is simple table lookup:

char table[256] ;

for (i=0; i<256; i++)
   for (b=0; b<8; b++)
      if (i & (1 << b))
         table[i] |= (128 >> b) ;

Now, for each byte in the source image, look it up in the table,
and if necessary, shift it some bits.  Very fast, very easy.

-tom