asflip(1)                AfterStep X11 window manager                asflip(1)



NAME
       asflip - demonstrates flipping image in 90 degree increments
       libAfterImage/tutorials/ASFlip

NAMEASFlip
SYNOPSIS
       libAfterImage application for image rotation.

DESCRIPTION
       New steps described in this tutorial are : ASFlip.1. Flip value.
       ASFlip.2. Rotating ASImage.

SEE ALSO
       Tutorial 1: ASView  - explanation of basic steps needed to use
                             libAfterImage and some other simple things.
       Tutorial 2: ASScale - image scaling basics.  Tutorial 3: ASTile  -
       image tiling and tinting.  Tutorial 4: ASMerge - scaling and blending
       of arbitrary number of
                             images.  Tutorial 5: ASGrad  - drawing multipoint
       linear gradients.

SOURCE
           #include "../afterbase.h" #include "../afterimage.h" #include
           "common.h"

           void usage() {
               printf( "Usage: asflip [-h]|[[-f flip]|[-m vertical] "
                       "[-g geom] image]");
               printf( "\nWhere: image - is image filename\n");
               printf( "       flip  - rotation angle in degrees. "
                       "90, 180 and 270 degrees supported\n");
               printf( "       geom  - source image is tiled using this
           geometry, "
                       "prior to rotation\n");
               printf( "       vertical - 1 - mirror image in vertical
           direction, "
                       "0 - horizontal\n"); }

           int main(int argc, char* argv[]) {
               Display *dpy = NULL;
               ASVisual *asv ;
               int screen = 0 , depth = 0 ;
               char *image_file = "rose512.jpg" ;
               int flip = FLIP_VERTICAL;
               Bool vertical = False, mirror = False ;
               int tile_x, tile_y, geom_flags = 0;
               unsigned int tile_width, tile_height ;
               ASImage *im = NULL;
               ASImage *flipped_im = NULL ;

               /* see ASView.1 : */
               set_application_name( argv[0] );

               if( argc > 1 )
               {
                   int i = 1 ;
                   if( strcmp( argv[1], "-h" ) == 0 )
                   {
                       usage();
                       return 0;
                   }
                   for( i = 1 ; i < argc ; i++ )
                   {
                       if( argv[i][0] == '-' && i < argc-1 )
                       {
                           switch(argv[i][1])
                           {
                               case 'm' :
                                   mirror = True;
                                   vertical = atoi(argv[i+1]) ;
                                   break ;
                               case 'f' :          /* see ASFlip.1 */
                                   mirror = False;
                                   flip = atoi(argv[i+1])/90 ;
                                   break ;
                               case 'g' :          /* see ASTile.2 : */
                                   geom_flags = XParseGeometry( argv[i+1],
                                                                &tile_x,
           &tile_y,
                                                                &tile_width,
                                                                &tile_height
           );
                                   break ;
                           }
                           ++i ;
                       }else
                           image_file = argv[i] ;
                   }
               }else
                   usage();

           #ifndef X_DISPLAY_MISSING
               dpy = XOpenDisplay(NULL);
               _XA_WM_DELETE_WINDOW = XInternAtom( dpy, "WM_DELETE_WINDOW",
           False);
               screen = DefaultScreen(dpy);
               depth = DefaultDepth( dpy, screen ); #endif
               /* see ASView.2 : */
               im = file2ASImage( image_file, 0xFFFFFFFF, SCREEN_GAMMA, 0,
           getenv("IMAGE_PATH"), NULL );
               if( im == NULL )
                   return 1;

               /* Making sure tiling geometry is sane : */
               if( !get_flags(geom_flags, XValue ) )
                   tile_x = 0 ;
               if( !get_flags(geom_flags, YValue ) )
                   tile_y = 0 ;
               if( !get_flags(geom_flags, WidthValue ) )
               {
                   if( !mirror )
                       tile_width = (get_flags(flip,FLIP_VERTICAL))?
                                       im->height:im->width ;
                   else
                       tile_width = im->width ;
               }
               if( !get_flags(geom_flags, HeightValue ) )
               {
                   if( !mirror )
                       tile_height = (get_flags(flip,FLIP_VERTICAL))?
                                       im->width:im->height;
                   else
                       tile_height = im->height ;
               }
               printf( "%s: tiling image \"%s\" to %dx%d%+d%+d and then "
                       "flipping it by %d degrees\n",
                       get_application_name(), image_file,
                       tile_width, tile_height,tile_x, tile_y, flip*90 );

               /* see ASView.3 : */
               asv = create_asvisual( dpy, screen, depth, NULL );

               /* see ASFlip.2 : */
               if( !mirror )
                   flipped_im = flip_asimage(  asv, im,
                                               tile_x, tile_y,
                                               tile_width, tile_height,
                                               flip,
                                               ASA_ASImage, 0,
                                               ASIMAGE_QUALITY_DEFAULT );
               else
                   flipped_im = mirror_asimage(asv, im,
                                               tile_x, tile_y,
                                               tile_width, tile_height,
                                               vertical,
                                               ASA_ASImage, 0,
                                               ASIMAGE_QUALITY_DEFAULT );
               destroy_asimage( &im );

               if( flipped_im )
               { #ifndef X_DISPLAY_MISSING
                   /* see ASView.4 : */
                   Window w = create_top_level_window( asv,
           DefaultRootWindow(dpy),
                                                       32, 32,
                                                       tile_width,
           tile_height,
                                                       1, 0, NULL,
                                                       "ASFlip", image_file );
                   if( w != None )
                   {
                       Pixmap p ;

                       XMapRaised   (dpy, w);
                       /* see ASView.5 : */
                       p = asimage2pixmap( asv, DefaultRootWindow(dpy),
           flipped_im,
                                           NULL, True );
                       destroy_asimage( &flipped_im );
                       /* see common.c: set_window_background_and_free() : */
                       p = set_window_background_and_free( w, p );
                       /* see common.c: wait_closedown() : */
                   }
                   wait_closedown(w);
                   dpy = NULL; #else
                   /* writing result into the file */
                   ASImage2file( flipped_im, NULL, "asflip.jpg", ASIT_Jpeg,
           NULL );
                   destroy_asimage( &flipped_im ); #endif
               }
               return 0 ; }
       libAfterImage/tutorials/ASFlip.1 [6.1]

SYNOPSIS
       Step 1. Flip value.

DESCRIPTION
       libAfterImage provides facility for rotating images in 90 degree
       increments - flipping essentially. Accordingly flip parameter could
       have 4 values - 0, -90, -180, -270 degrees.

EXAMPLE
           flip = atoi(argv[2])/90;

SEE ALSO
       flip

SYNOPSIS
       Step 2. Flipping ASImage.

DESCRIPTION
       Flipping can actually be combined with offset and tiling. Original
       image gets tiled to supplied rectangle, and then gets rotated to
       requested degree.

EXAMPLE
           flipped_im = flip_asimage(asv, im,
                                         tile_x, tile_y,
                                         tile_width, tile_height,
                                         flip,
                                         ASA_XImage,0,
                                         ASIMAGE_QUALITY_DEFAULT );
               destroy_asimage( &im );

NOTES
       As far as we need to render rotated image right away - we set to_xim
       parameter to True, so that image will be rotated into XImage. Right
       after rotation is done - we can destroy original image.

SEE ALSO
       flip_asimage()



3rd Berkeley Distribution     AfterStep v.2.2.12                     asflip(1)
