2011年1月19日 星期三

QGraphicsItem的碰撞偵測

先利用collidingItems求出所有item發生碰撞的QGraphicsItem,
在利用qgraphicsitem_cast來過濾QGraphicsItem類別

2011年1月9日 星期日

邊框字

上星期突然有個想法,為何不能印出邊框字呢
於是我稍微修改了一下之前的點陣字
作一個自動將點陣字轉邊框字

完整程式在下面

2011年1月1日 星期六

bdf點陣字(二)

上一個方法,由於bdf檔是即時讀取,所以效能較差。
所以我利用bdf2c產生字型的font.h和font.c檔案
之後只要
#include "font.h"
extern struct bitmap_font font;
就可以使用

struct bitmap_font {
    unsigned char Width;        //字元最大寬度
    unsigned char Height;        //字元高度
    unsigned short Chars;        //總字元數
    const unsigned char *Widths;    //每個字元的寬度
    const unsigned short *Index;    //每個字元的索引
    const unsigned char *Bitmap;    //每個字元的資料

};
舉例
如果我要印出A字元(65)
就要找出65在font.Index的位置(pos)
然後資料就是在font.Bitmap的font.Width*font.Height/8*pos的位置
長度則是font.Width*font.Height/8

範例

bdf點陣字

bdf font是文字格式的點陣字型
我是將unifont(unicode bdf font),掃成我定義的bitmap格式

   1               1               1     1        1    1     1
    1        1     1               1     1        1   1      1
 1111111 1111      11111111111     1     1       1   11111  1
         1        1     1          1  1111111   1  1 1   1 1  1
  1   1  1        1     1          11    1  1   111  1   1 111
   1 1   1       1      1        1 1 1   1  1    1   11111  1
11111111 111111    1111111111    1 1     1  1   1  1 1   1 1  1
    1    1  1      1    1        1 1     1  1   1111 1   1 1111
    1    1  1      1    1       1  1 1111111111    1 11111    1
 1111111 1  1      1    1          1     1             1
    1    1  1   111111111111111    1    1 1     111111111111111
  1 1 1  1  1           1          1    1 1          1 1 1
 1  1  1 1  1           1          1   1   1        1  1  1
1   1   1   1           1          1   1   1      11   1   11
  1 1   1   1           1          1  1     1   11     1     11
   1   1    1           1          1 1       11        1