lib/FrameGraphics.hh
00001 // フレームバッファグラフィックスクラス
00002 // 2011/02/07 Yuki YOKOKURA
00003 //
00004 // 画面上に図等の描画を行います。ただし,/dev/fb* が必要。
00005 //
00006 // Copyright (C) 2011 Yuki YOKOKURA
00007 // This program is free software;
00008 // you can redistribute it and/or modify it under the terms of the GNU General Public License
00009 // as published by the Free Software Foundation; either version 3 of the License, or any later version.
00010 // This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
00011 // without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
00012 // See the GNU General Public License for more details <http://www.gnu.org/licenses/>.
00013 // Besides, you can negotiate about other options of licenses instead of GPL.
00014 // If you would like to get other licenses, please contact us<yuki@katsura.sd.keio.ac.jp>.
00015 
00016 #ifndef FRAMEGRAPHICS
00017 #define FRAMEGRAPHICS
00018 
00019 #include <unistd.h>
00020 #include <stdio.h>
00021 #include <fcntl.h>
00022 #include <linux/fb.h>
00023 #include <linux/fs.h>
00024 #include <sys/mman.h>
00025 #include <sys/ioctl.h>
00026 #include <string.h>
00027 
00028 
00029 // 色の定義 (色深度16bitモード用)
00030 // ビットパターン MSB RRRRRGGGGGGBBBBB LSB (赤:ビット15~11 緑:ビット10~5 青:ビット4~0)
00031 // 実は赤青に比べ緑の分解能が1bit分だけ多い
00032 // 以下は基本色の定義  この他にも勝手に好きな色を作れる
00033 #define FG_COLOR_RED            0xF800  // 赤
00034 #define FG_COLOR_GREEN          0x07E0  // 緑
00035 #define FG_COLOR_BLUE           0x001F  // 青
00036 #define FG_COLOR_CYAN           FG_COLOR_GREEN | FG_COLOR_BLUE  // 水 (シアン)              // ORを取ると色が足せるよ~!
00037 #define FG_COLOR_MAGENTA        FG_COLOR_RED | FG_COLOR_BLUE    // 紫 (マゼンタ)
00038 #define FG_COLOR_YELLOW         FG_COLOR_RED | FG_COLOR_GREEN   // 黄 (イエロー)
00039 #define FG_COLOR_BLACK          0x0000  // 黒
00040 #define FG_COLOR_WHITE          0xFFFF  // 白
00041 #define FG_COLOR_GRAY50         0x7BEF  // 灰 輝度50%
00042 #define FG_COLOR_GRAY25         0x39E7  // 灰 輝度25%
00043 
00044 class FrameGraphics {
00045         // フレームバッファクラス
00046         private:
00047                 FrameGraphics(const FrameGraphics&);                                    // コピーコンストラクタ使用禁止
00048                 const FrameGraphics& operator=(const FrameGraphics&);   // 代入演算子使用禁止
00049                 int FBfd;               // フレームバッファ ファイルディスクリプタ
00050                 short *FBptr;   // フレームバッファ ポインタ
00051                 struct fb_fix_screeninfo finfo; // 固定情報構造体
00052                 struct fb_var_screeninfo vinfo; // 可変情報構造体
00053                 int width;              // [px]         横幅
00054                 int height;             // [px]         高さ
00055                 int depth;              // [bits]       色深度
00056                 int size;               // [bytes]      画面の大きさ
00057                 int length;             //                      フレームバッファポインタの長さ
00058         
00059         public:
00060                 FrameGraphics(const char* device);                                                      // コンストラクタ フレームバッファ初期化
00061                 ~FrameGraphics(void);                                                                           // デストラクタ   フレームバッファ開放
00062                 void ShowParam(void);                                                                           // 画面情報の表示
00063                 void DrawPoint(int x, int y, short color);                                      // 点の描画
00064                 void DrawLine(int x1, int y1, int x2, int y2, short color);     // 直線の描画
00065                 void DrawRect(int x, int y, int w, int h, short color);         // 長方形の描画(色は塗らない)
00066                 void DrawRectFill(int x, int y, int w, int h, short color);     // 長方形の描画(色を塗る)
00067                 void ClearScreen(void);                                                                         // 画面の消去
00068                 void ClearRect(int x, int y, int w, int h);                                     // 長方形の範囲内を消去
00069                 int GetWidth(void);                                                                                     // 画面の幅の取得
00070                 int GetHeight(void);                                                                            // 画面の高さの取得
00071         
00072 
00073 };
00074 
00075 #endif
00076 
 All Classes Files