asflip(3x)

πŸ’– asflip(3x) πŸ’–

okay bestie, we're cracking open asflip(3x) from the AfterStep X11 window manager era of the manual pages, and no cap, this one is a whole tutorial situation. Let's get into it πŸ¦‹


✨ NAME ✨

asflip β€” demonstrates flipping image in 90 degree increments libAfterImage/tutorials/ASFlip

✨ NAMEASFlip ✨

(yeah, they really put a second NAME section in here, iconic behavior, we're keeping it πŸ’…)

✨ SYNOPSIS ✨

libAfterImage application for image rotation.

✨ DESCRIPTION ✨

So the new steps this tutorial is gonna walk you through are literally these two:

  • ASFlip.1. Flip value.
  • ASFlip.2. Rotating ASImage.

That's it. That's the whole lesson. Rotate the image, girl. πŸ”₯

✨ 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 ✨

here's the whole thing, and yes, it's a lot. grab a snack πŸ“

#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 ✨

so libAfterImage has this whole facility for rotating images in 90 degree increments β€” which is basically flipping, fr fr. and because of that, the flip parameter can only have 4 values: 0, -90, -180, -270 degrees. that's the vibe check on the whole thing πŸ’…

✨ EXAMPLE ✨

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

✨ SEE ALSO ✨

flip

libAfterImage/tutorials/ASFlip.2 [6.2]

✨ SYNOPSIS ✨

Step 2. Flipping ASImage.

✨ DESCRIPTION ✨

bestie, flipping can actually be combined with offset and tiling. so here's the tea: the original image gets tiled to the supplied rectangle, and then it gets rotated to the requested degree. two-step glow-up πŸ”₯

✨ 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 ✨

since we need to render the rotated image right away, we set the to_xim parameter to True, so that the image will be rotated into an XImage. and the second rotation is done β€” boom β€” we can destroy the original image. efficient queen behavior πŸ‘‘

✨ SEE ALSO ✨

flip_asimage()


and that's a wrap, pookie 🫢 this whole page came to you from the 3rd Berkeley Distribution, AfterStep v.2.2.12, filed under asflip(3x). go rotate something pretty πŸ’–βœ¨

πŸ“¦ where this page comes from