• DirectFB 之 实例图像不断右移


    /**********************************************
     * Author: younger.liucn@gmail.com
     * File name: imgrotate.c
     * Description: animation
     * Modified:
     *   date:   2014-01-06  create
     *********************************************/
    #include <directfb.h>
    
    #include "animation.h"
    
    #define MAX_LOOP        2
    #define INTERVAL_PIXEL   2
    #define EYE_HZ          50
    #define INTERVAL_TIME   (1000 / EYE_HZ)
    
    static int animation(int argc, char **argv);
    
    int main(int argc, char **argv)
    {
        return  animation(argc, argv);
    }
    
    static int animation(int argc, char **argv)
    {
        int i, loop = 0;
        int screen_width = 0, screen_height = 0;
        DFBSurfaceDescription dsc;
        /*
         * For collecting infomation of image,
         * and provide image to IDirectFBSurface
         */
        IDirectFBImageProvider *provider;
        IDirectFB *dfb = NULL;
        IDirectFBSurface *primary = NULL;
        IDirectFBSurface *logo = NULL;
    
        /* 初始化整个DirectFB库,为后续画图等操作做准备 */
        DirectFBInit(&argc, &argv);
        DirectFBCreate(&dfb);
        
        /* 设置协作等级为全屏模式,具体请阅读SetCooperativeLevel接口解析 */
        dfb->SetCooperativeLevel(dfb, DFSCL_FULLSCREEN);
        dsc.flags = DSDESC_CAPS;
        dsc.caps = DSCAPS_PRIMARY | DSCAPS_FLIPPING;
    
        /* 根据dsc创建一个基本平面 */
        dfb->CreateSurface(dfb, &dsc, &primary);
        /* 获取该基本平面的宽度和高度 */
        primary->GetSize(primary, &screen_width, &screen_height);
    
        /* 将要显示的图片及其相关信息保存在provider中 */
        dfb->CreateImageProvider(dfb, BA_IMG_NAME, &provider);
    
        /* 将保存在provider中的图片信息提取出来,存于dsc中 */
        provider->GetSurfaceDescription(provider, &dsc);
    
        /* 根据dsc创建一个图像平面 */
        dfb->CreateSurface(dfb, &dsc, &logo);
    
        /* 将图片呈递给刚才建立的logo平面,如果大小不一,则进行缩放 */
        provider->RenderTo(provider, logo, NULL);
    
        /* 释放资源provider */
        provider->Release(provider);
    
        for (i = -dsc.width;
                i < screen_width && !ba_check_exit(shared_mem);
                i = i + INTERVAL_PIXEL) {
            /* 清空屏幕 */
            primary->FillRectangle(primary, 0, 0,
                        screen_width, screen_height);
            primary->Blit(primary, logo, NULL, i,
                        (screen_height - dsc.height) / 2);
            /*
             * Blit model:将图片blit到平面
             * Blit(IDirectFBSurface *thiz, IDirectFBSurface *source,
             *          const DFBRectangle *source_rect, int x, int y);
             * if source_rect == NULL,use entire surface.
             * DFBRctangle is rectangular frame defined by two points.
             * (x, y):the point of top left corner.
             */
    
            /* flit整个屏幕 */
            primary->Flip(primary, NULL, DSFLIP_WAITFORSYNC);
    
            msleep(INTERVAL_TIME);
    
            if ((screen_width - INTERVAL_PIXEL) <= i && loop < MAX_LOOP) {
                BA_LOG(1, "screen_%d, loop:%d.
    ", screen_width, loop);
                loop++;
                i = -dsc.width;
            }
    
        }
    
        logo->Release(logo);
        primary->Release(primary);
        dfb->Release(dfb);
        return 0;
    }

  • 相关阅读:
    Pills
    项链
    IIS7.5 关于ASP连接ACCESS数据库超时问题
    清明
    The New Beginning
    新的开始
    Mysql中文乱码以及导出为sql语句和Excel问题解决
    Spring学习笔记01. 入门知识,IoC/DI
    selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PAT
    Django框架 python3.7+django2.2 报错:AttributeError: ‘str’ object has no attribute ‘decode’解决办法
  • 原文地址:https://www.cnblogs.com/youngerchina/p/5624511.html
Copyright © 2020-2023  润新知