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

            zyzx的小窩

            C/C++,GUI,個人移動存儲,zyzx_lsl@163.com

             

            三、基礎繪圖模塊

            /*
             * Create By      : 李紹良[lsl](zyzx)
             * Email            : zyzx_lsl@163.com
             * Create Time  : 2015-03-14
             * 轉載請注明來源:http://www.shnenglu.com/zyzx
            */
            如圖,繪圖模塊基本上是一些圖形運算方面的接口。
                    繪圖模塊圍繞的中心的是畫布:
            typedef struct LUI_CANVAS
            {
                int_t cx;                              //畫布寬
                int_t cy;                              //畫布高
                int_t bpp;                           //像素位寬 RGB1555 2字節;RGB8888 4字節
                int_t pitch;                         //行跨距, = cx * bpp
                int_t len;                            //*pData數據長度 = pitch * cy
                unsigned char *pData;      //申請的內存
            }LUI_CANVAS;
                    其實表征的就是一個bmp圖片。像素的格式一般采用RGB1555,與RGB8888格式,兩這都可以將透明度信息表示出來。采用RGB1555格式即可以剩下不少內存,也可以降低CPU開銷,同時UI設計師也可以相對寬松的選擇圖片色彩。我們做的幾代產品都沒有逃脫選用RGB1555格式的命運,在需要支持全屏1920*1080P的分辨率甚至4K界面的分辨率、ARM硬件(甚至很低端)這種條件下,想使用RGB8888簡直就是一種奢望。
                    至于如何繪制基礎圖形,這個網絡上很多。實際項目中也不是我們寫的模擬代碼,海斯圖形處理芯片中有相關的圖形加速模塊,比這個模擬代碼效率高多了。
                    創建和銷毀畫布在這里負責,主要是防止某些嵌入式設備圖形部分需要使用設備專屬內存,而不是隨意new出來的。
                    繪制圖片這一塊還需要圖片打包模塊的支持,后面作為一個專題。
                    繪制文字,有些難度,我們一直使用的是柵格字庫(基于效率、使用便利上考慮),也可以擴展使用矢量字庫。國際化的界面估計是整個UI體系的最大難點了,我們也只是盡量兼容更多的語言。這部分也后面作為一個專題。
                    到這里,基礎理論差不多了。我們需要在Windows上建立調試環境,則還需要創建一個Win32的demo工程。
                    
                    demo程序使用的是vs2005直接生成的WIN32程序,也僅僅添加了一個類CWinGraph,插入到了Win32流程中。主要的使用WIN窗口把我們的界面顯示出來
                    主要是在窗口消息處理中簡單的加入了這些代碼
            case WM_PAINT:
            hdc = BeginPaint(hWnd, &ps);
            // TODO: 在此添加任意繪圖代碼...
            int_t cx, cy;
            g_pGraph->ScreenSize(&cx, &cy);
            g_pGraph->Refresh(0, 0, cx, cy);
            EndPaint(hWnd, &ps);
            case WM_CREATE: 
            g_pGraph->Initial(hWnd, DLG_WIDTH, DLG_HEIGHT); 
            break; 
            case WM_DESTROY: 
            g_pGraph->Quit(); 
            PostQuitMessage(0); 
            break;
                   
                    代碼本身沒有使用比較嚴謹的風格,很多參數和做法后面還會響應的調整,僅以此來表達對接模塊需要做的事情。
                    如下圖demo程序跑起來的效果圖,雖然簡單,但卻是基礎。
            附件是源代碼
            /Files/zyzx/my_lui_三_基礎繪圖模塊.zip

            posted on 2015-03-15 14:08 zyzx 閱讀(2325) 評論(0)  編輯 收藏 引用 所屬分類: 自己動手寫GUI

            導航

            統計

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            常用鏈接

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            中文字幕亚洲综合久久菠萝蜜| 久久免费看黄a级毛片| 影音先锋女人AV鲁色资源网久久| 久久噜噜电影你懂的| 国产亚洲精午夜久久久久久| 久久伊人精品一区二区三区| 国内精品伊人久久久久AV影院| 91精品国产高清久久久久久io | 久久91精品久久91综合| 99久久精品这里只有精品| 国产精品99久久久久久人| 久久天天日天天操综合伊人av| 久久久亚洲欧洲日产国码aⅴ| 久久99精品久久久久久动态图| 蜜桃麻豆www久久国产精品| 大伊人青草狠狠久久| 国产激情久久久久影院老熟女| 午夜精品久久久久久毛片| 久久免费大片| 亚洲国产成人精品无码久久久久久综合| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 国产色综合久久无码有码| 狠狠色丁香久久婷婷综合五月| 人妻系列无码专区久久五月天| 国产成人精品久久免费动漫| 亚洲国产精品一区二区久久hs| 久久久久噜噜噜亚洲熟女综合| 久久精品国产亚洲沈樵| 国产精品青草久久久久婷婷| 婷婷综合久久中文字幕| 久久精品国产只有精品66| 嫩草伊人久久精品少妇AV| 国产99精品久久| 久久综合精品国产一区二区三区 | 亚洲欧美久久久久9999 | 国产香蕉久久精品综合网| 亚洲午夜久久久久妓女影院| 性做久久久久久久| 亚洲欧美日韩久久精品| 久久精品亚洲日本波多野结衣| 久久精品国产一区|