⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fiascotopnm.c

📁 linux下将各类格式图片转换工具
💻 C
📖 第 1 页 / 共 2 页
字号:
        filename = calloc (strlen (basename) + strlen (suffix) + 2                           + 10 + (int) (log10 (frames) + 1), sizeof (char));        if (!filename)            error ("Out of memory.");        for (n = 0; n < frames; n++)        {            clock_t fps_timer;     /* frames per second timer struct */                 prg_timer (&fps_timer, START);                 if (image_name)        /* just write frame to disk */            {                if (frames == 1)        /* just one image */                {                    if (streq (image_name, "-"))                        strcpy (filename, "-");                    else                        sprintf (filename, "%s.%s", basename, suffix);                }                else                {                    fprintf (stderr, "Decoding frame %d to file `%s.%0*d.%s\n",                             n, basename, (int) (log10 (frames - 1) + 1),                             n, suffix);                    sprintf (filename, "%s.%0*d.%s", basename,                             (int) (log10 (frames - 1) + 1), n, suffix);                }                if (!fiasco_decoder_write_frame (decoder_state, filename))                    error (fiasco_get_error_message ());            }#ifndef X_DISPLAY_MISSING            else            {                fiasco_image_t *frame;                        if (!(frame = fiasco_decoder_get_frame (decoder_state)))                    error (fiasco_get_error_message ());                        if (frames == 1)                    panel = NO;                if (xinfo == NULL)      /* initialize X11 window */                {                    const char * const title =                         fiasco_decoder_get_title (decoder_state);                    char        titlename [MAXSTRLEN];                               sprintf (titlename, "dfiasco " VERSION ": %s",                             strlen (title) > 0 ? title : wfa_name);                    xinfo =                         open_window (titlename, "dfiasco",                                     (width  << (double_resolution ? 1 : 0)),                                     (height << (double_resolution ? 1 : 0))                                     + (panel ? 30 : 0));                    alloc_ximage (xinfo, width  << (double_resolution ? 1 : 0),                                  height << (double_resolution ? 1 : 0));                    if (panel)       /* initialize button panel */                        binfo = init_buttons (xinfo, n, frames, 30, 10);                    renderer =                         fiasco_renderer_new (xinfo->ximage->red_mask,                                             xinfo->ximage->green_mask,                                             xinfo->ximage->blue_mask,                                             xinfo->ximage->bits_per_pixel,                                             double_resolution);                    if (!renderer)                        error (fiasco_get_error_message ());                }                renderer->render (renderer, xinfo->pixels, frame);                frame->delete (frame);                        if (frame_buffer != NULL) /* store next frame */                {                    size_t size = (width  << (double_resolution ? 1 : 0))                        * (height << (double_resolution ? 1 : 0))                        * (xinfo->ximage->depth <= 8                           ? sizeof (byte_t)                           : (xinfo->ximage->depth <= 16                              ? sizeof (u_word_t)                              : sizeof (unsigned int)));                    frame_buffer [n] = malloc (size);                    if (!frame_buffer [n])                        error ("Out of memory.");                    memcpy (frame_buffer [n], xinfo->pixels, size);                    if (n == frames - 1)                    {                        show_stored_frames (frame_buffer, frames - 1,                                            xinfo, binfo, size, frame_time);                        break;                    }                }                display_image (0, 0, xinfo);                if (frames == 1)                    wait_for_input (xinfo);                else if (panel)                {                    check_events (xinfo, binfo, n, frames);                    if (binfo->pressed [QUIT_BUTTON])                         /* start from beginning */                        break;                    if (binfo->pressed [STOP_BUTTON])                         /* start from beginning */                        n = frames;                               if (binfo->pressed [RECORD_BUTTON] && frame_buffer == NULL)                    {                        n = frames;                        frame_buffer =                             calloc (frames, sizeof (unsigned char *));                        if (!frame_buffer)                            error ("Out of memory.");                    }                }                while (prg_timer (&fps_timer, STOP) < frame_time) /* wait */                    ;            }#endif /* not X_DISPLAY_MISSING */           }        free (filename);           fiasco_decoder_delete (decoder_state);    } while (panel#ifndef X_DISPLAY_MISSING             && !binfo->pressed [QUIT_BUTTON]#endif /* not X_DISPLAY_MISSING */                );#ifndef X_DISPLAY_MISSING    if (renderer)        renderer->delete (renderer);    if (!image_name)    {        close_window (xinfo);        free (xinfo);        xinfo = NULL;        if (binfo)            free (binfo);    }#endif /* not X_DISPLAY_MISSING */}static voidget_output_template (const char *image_name, const char *wfa_name,                     bool_t color, char **basename, char **suffix)/* *  Generate image filename template for output of image sequences. *  'wfa_name' is the filename of the WFA stream. *  Images are either saved with filename 'basename'.'suffix' (still images) *  or 'basename'.%03d.'suffix' (videos). * *  No return value. * *  Side effects: *  '*basename' and '*suffix' is set. */{    if (!wfa_name || streq (wfa_name, "-"))        wfa_name = "stdin";           /*     *  Generate filename template     */    if (!image_name || streq (image_name, "") || streq (image_name, "-"))    {        *basename = strdup (wfa_name);        *suffix   = NULL;    }    else    {        *basename = strdup (image_name);        *suffix   = strrchr (*basename, '.');    }        if (*suffix)         /* found name 'basename.suffix' */    {        **suffix = 0;         /* remove dot */        (*suffix)++;        if (**suffix == 0)            *suffix = strdup (color ? "ppm" : "pgm");    }    else             /* no suffix found, generate one */        *suffix = strdup (color ? "ppm" : "pgm");}#ifndef X_DISPLAY_MISSINGstatic voidshow_stored_frames (unsigned char * const *frame_buffer, int last_frame,                    x11_info_t *xinfo, binfo_t *binfo, size_t size,                    unsigned frame_time)/* *  After a WFA video stream has been saved, all frames have been *  decoded and stored in memory. These frames are then displayed *  in an endless loop. * *  This function never returns, the program is terminated if the *  STOP button is pressed. */{    int n = last_frame;          /* frame number */       while (1)    {        clock_t fps_timer;        /* frames per second timer struct */              prg_timer (&fps_timer, START);              display_image (0, 0, xinfo);        check_events (xinfo, binfo, n, last_frame + 1);        if (binfo->pressed [STOP_BUTTON])            n = 0;        else if (binfo->pressed [QUIT_BUTTON])            break;        else if (binfo->pressed [PLAY_BUTTON])            n++;        else if (binfo->pressed [RECORD_BUTTON]) /* REWIND is mapped RECORD */            n--;        if (n < 0)            n = last_frame;        if (n > last_frame)            n = 0;        memcpy (xinfo->pixels, frame_buffer [n], size);        while (prg_timer (&fps_timer, STOP) < frame_time) /* wait */            ;    };}#endif /* not X_DISPLAY_MISSING */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -