可以直接按快捷鍵 Alt + Shift + NumLk
筆電鍵盤可能就要按 Alt + Fn + Shift + NumLk
按不出來,直接開控制台出來改也是可以。
XP 跟 Vista 好像都有這個功能。
2009年10月28日 星期三
2009年10月9日 星期五
BMP 的 imagesize 怎麼算?
在BMP檔案裡,22H~25H的位置用 4 bytes 表示了 imagesize,
很直覺的會認為 BMP = height * width * bits / 8,
但事實上在一般電腦裡每次存取 4 bytes 的速度是較快的,
所以BMP來說,就會自動補 0 來至能夠讓 4 整除的大小,
例如:
有一張 BMP 的大小
width = 90
height = 30
bits = 24
imagesize = 8160
照理說應該會是 90 * 30 * 24 / 8 = 8100 (無法被4整除)
所以都會在 width 的右邊補 0 至能讓 4 整除,
90 * 3 / 4 = 67...2
(67+1) * 4 = 272 ( 每行多補了 2 bytes )
結果,272 * 30 = 8160
但事實上在一般電腦裡每次存取 4 bytes 的速度是較快的,
所以BMP來說,就會自動補 0 來至能夠讓 4 整除的大小,
例如:
有一張 BMP 的大小
width = 90
height = 30
bits = 24
imagesize = 8160
照理說應該會是 90 * 30 * 24 / 8 = 8100 (無法被4整除)
所以都會在 width 的右邊補 0 至能讓 4 整除,
90 * 3 / 4 = 67...2
(67+1) * 4 = 272 ( 每行多補了 2 bytes )
結果,272 * 30 = 8160
2009年9月28日 星期一
[C/C++] read in binary mode
如果想讀資料中每個 byte 的資料,下例看似正常沒什麼奇怪的。
Data : 42 4D 20 2A 3C 1A 42 43 ...
fp = fread(“data”, “r”);
c = fgetc(fp);
但這其實是錯的,當讀到 1A 時,後面接著讀的資料全都會變成 FFFFFFFF,
因為 1A 在 ASCII 裡代表的是 Substitue,也就是 Crtl + Z,
不知道程式讀到這裡的時候,是不是自己判斷暫停了?
最保險的方法還是加上 b 吧!
fp = fread(“data”, “rb”);
因為 1A 在 ASCII 裡代表的是 Substitue,也就是 Crtl + Z,
不知道程式讀到這裡的時候,是不是自己判斷暫停了?
最保險的方法還是加上 b 吧!
fp = fread(“data”, “rb”);
2009年4月14日 星期二
[C/C++] 更改變數的位元值
假設 int a = 0xFFFFFFF1,
想要將 3rd bit 設成 1,且不更動到其他 bits 的值,該怎麼用 C 來寫呢?
其實只要用 CLEAR 和 OR 就可以達成,什麼語言都一樣,
int MASK = 0x04; // 3rd bit is what we choose
a &= ~MASK; // CLEAR bit
a |= MASK; // SET bit
最後,
a = 0xFFFFFFF5
就是我們要結果啦!
2008年12月22日 星期一
2008年11月9日 星期日
貪食蛇 Snakii
Snakii V1.1 (235KB)
之前有做過 console 版本的, 不過 code 不見了 @@
所以這次又重寫了一個視窗版的.
畫面很陽春啦, 自己畫圖超累的 XD
Bug1. 因為障礙物是隨機產生的, 如果障礙把水果圍住, Snakii 就吃不到了.
雖然機率應該很低, 不過有空還是要解決一下這個問題.
V1.1 更新內容 :
1. 更新背景
2. 一開始不容易撞到石頭
V1.0 更新內容 :
1. 初版
之前有做過 console 版本的, 不過 code 不見了 @@
所以這次又重寫了一個視窗版的.
畫面很陽春啦, 自己畫圖超累的 XD
Bug1. 因為障礙物是隨機產生的, 如果障礙把水果圍住, Snakii 就吃不到了.
雖然機率應該很低, 不過有空還是要解決一下這個問題.
V1.1 更新內容 :
1. 更新背景
2. 一開始不容易撞到石頭
V1.0 更新內容 :
1. 初版
2008年11月4日 星期二
訂閱:
文章 (Atom)

