• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            AGG入門(二) - 平臺(tái)支持

            一、先看看下面的代碼,并試著編譯下:

            #include <platform/agg_platform_support.h>
            #include <agg_pixfmt_rgb.h>
            #include <agg_renderer_base.h>
            #include <stdio.h>

            #include <agg_path_storage.h>

            class the_application : public agg::platform_support
            {
            public:
                the_application(agg::pix_format_e format, bool flip_y) : 
                    agg::platform_support(format, flip_y),
                    pix_fmt(rbuf_window()),
                    ren_bas(pix_fmt) //初始化渲染器
                {
                }

                virtual void on_draw()
                {
                    ren_bas.reset_clipping(true);
                    ren_bas.clear(agg::rgba8(255, 255, 255));
                }

                virtual void on_mouse_button_down(int x, int y, unsigned flags)
                {
                    if(flags == agg::mouse_left) {
                        char str[50];
                        sprintf(str, "Mouse location:(%d, %d)", x, y);
                        message(str);
                    }
                }

                virtual void on_key(int x, int y, unsigned key, unsigned flags)
                {
                    if(key == agg::key_return && flags == agg::kbd_shift) {
                        unsigned img = 0, states;
                        states = create_img(0, 500, 500);
                        states = load_img(img, "Steve-and-Bill.bmp");
                        copy_img_to_window(img);
                        update_window();
                    }
                }

            private:
                agg::pixfmt_rgb24 pix_fmt;
                agg::renderer_base<agg::pixfmt_rgb24> ren_bas;

            };

            int agg_main(int argc, char* argv[])
            {
                the_application app(agg::pix_format_rgb24, true);
                app.caption("AGG Test");
                
                if(app.init(500, 500, agg::window_resize)) {
                    return app.run();
                }
                return -1;
            }
            如果不出意外,在窗口中點(diǎn)擊鼠標(biāo)左鍵將會(huì)出現(xiàn)對(duì)話框提示當(dāng)前鼠標(biāo)的位置,而按下Shift+Enter將會(huì)在窗口中顯示在工作目錄下的位圖“Steve-and-Bill.bmp”;

            二、解釋

            先看看頭文件:platform/agg_platform_support.h,它里邊定義了一個(gè)platform_support類——它允許你建立一個(gè)窗口來測(cè)試你的圖形,并用鼠標(biāo)鍵盤去控制它。

            類型

            • class platform_support 

            主要成員函數(shù)

            • platform_support(pix_format_e, bool) : 構(gòu)造函數(shù)。設(shè)置窗口風(fēng)格和y軸是否上下翻轉(zhuǎn);
            • width() :返回窗口的寬;
            • height() :返回窗口的高;
            • caption([ const char* ]) :設(shè)置標(biāo)題或返回標(biāo)題字符串;
            • format() : 返回窗口風(fēng)格;
            • message(const char*) :彈出對(duì)話框(沒有風(fēng)格可選);
            • run() :運(yùn)行窗口;
            • force_redraw() :重繪窗口,調(diào)用on_draw();
            • update_window() :更新窗口,既是把渲染緩存中已有的內(nèi)容寫入窗口,不調(diào)用on_draw()。
            • platform_support為我們提供了一個(gè)很好地繪圖平臺(tái),它有一系列的函數(shù)可用于操作位圖(BMP或PPM):
              • create_img():創(chuàng)建一個(gè)編號(hào)為idx的位圖;
              • save_img():將位圖idx保存到文件中;
              • load_img():從文件中加載位圖到idx中;
              • copy_img_to_window():把idx拷貝到渲染緩存里;
              • copy_img_to_img():把idx拷貝到另一幅位圖里;
              • copy_window_to_img() :將渲染緩存里的內(nèi)容拷貝到位圖。

            虛函數(shù)(一般都是些消息,要覆蓋它以讓消息循環(huán)調(diào)用)

            • on_init() :窗口初始化時(shí)調(diào)用;
            • on_resize(int, int) :改變大小時(shí)調(diào)用;
            • on_idle()  :空閑時(shí)調(diào)用;
            • on_mouse_move(int, int, unsigned) :鼠標(biāo)移動(dòng)時(shí)調(diào)用;
            • on_mouse_button_down(int, int, unsigned) :鼠標(biāo)按下時(shí)調(diào)用;
            • on_mouse_button_up(int, int, unsigned)  :鼠標(biāo)彈起時(shí)調(diào)用;
            • on_key(int, int, unsigned, unsigned)  :鍵盤打字時(shí)調(diào)用;
            • on_draw()  :窗口重繪時(shí)調(diào)用。

            三、結(jié)語

            platform_support 的功能不僅僅是這么多,除此之外,他還能使用控件,等等。但很多時(shí)候,成熟的應(yīng)用是不會(huì)使用它的,因?yàn)樗庋b了太多,雖然保證了跨平臺(tái)性,卻缺乏了自由性。platform_support 的主要作用是測(cè)試圖像和修改圖像,方便工作和移植……還有,方便初學(xué)者入門……

            posted on 2012-07-24 16:28 Shihira 閱讀(4071) 評(píng)論(1)  編輯 收藏 引用 所屬分類: 圖形編程

            評(píng)論

            # re: AGG配置在VS2010 2015-04-09 13:37 冀甜甜

            請(qǐng)問,在VS2010中怎么配置AGG環(huán)境
            還有,為什么我的.lib程序不能啟動(dòng)呢
              回復(fù)  更多評(píng)論   

            導(dǎo)航

            統(tǒng)計(jì)

            公告

            留言簿(2)

            隨筆分類

            搜索

            最新隨筆

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            伊人久久大香线蕉AV色婷婷色 | 伊人久久无码精品中文字幕| 久久本道伊人久久| 久久国产精品-久久精品| 四虎国产精品免费久久5151 | 久久天天躁夜夜躁狠狠| 久久精品国产99国产精品导航| 久久综合狠狠综合久久综合88 | 久久亚洲中文字幕精品一区四 | 情人伊人久久综合亚洲| 欧美午夜A∨大片久久| 无码久久精品国产亚洲Av影片| 精品久久久无码中文字幕天天 | 国产精品久久久久天天影视| 国内精品久久久久久久久电影网| 久久精品国产免费观看| 国产呻吟久久久久久久92| 亚洲精品蜜桃久久久久久| 久久国产精品免费一区二区三区 | 狠狠精品干练久久久无码中文字幕 | 久久er国产精品免费观看2| 久久人人爽人人爽人人片AV麻烦 | 亚洲欧美日韩久久精品第一区| 观看 国产综合久久久久鬼色 欧美 亚洲 一区二区| 久久www免费人成看国产片| av午夜福利一片免费看久久| 久久亚洲中文字幕精品一区| 久久精品99无色码中文字幕| 精品久久人妻av中文字幕| 久久久久国产精品人妻| 亚洲中文字幕伊人久久无码| 久久精品视频91| 久久精品一区二区影院| 岛国搬运www久久| 国产激情久久久久影院老熟女免费 | 色欲久久久天天天综合网精品 | 国产成人久久精品二区三区| 久久91精品国产91久久户| 99久久99这里只有免费费精品| 麻豆亚洲AV永久无码精品久久| 亚洲第一极品精品无码久久|