

沙蟬跌落地 |
聲都吾聲 |
BOOKCARD
龍飛鳳舞振家聲 |
招牌一出棟天庭 |
『龍飛鳳舞』指『喫夜粥練硬對拳頭』
『招牌』指『洪門』
『棟』指『棟穿』
『天庭』指『满清』
咸丰四年-儒略歷1854年,『陳開』白晝獄官, 夜晚洪門『洪順堂』大佬. 得知『洪秀全/全哥』係金田起義,之後仲係金陵建立『太平天國』.
『陳開』知道時機成熟,連仝 二花面『李文茂』, 『豐寧寺』主持『鄺能/和尚能』三人密謀 决定發動洪門起義. 『和尚能』議定作戰戰略『拜佛』『劏羊』『擒龍』.
『龍飛鳳舞振家聲 招牌一出棟天庭』.咸豐四年六月十一日即係1854年7月5日,主帥『陳開』領率『洪門子弟』,副帥『李文茂』領率『梨园子弟』,『和尚能』軍師.
首戰『拜佛』壹日 占領『佛山』, 『和尚能』以『塔坡寺』為本陳. 發動『劏羊』作戰.
買雜牌『B450-ITX』配『RYZEN5-1500X』砌臺ITX,摆係老竇屋企睇片.點知『BE200』WIFI吾認識. 早期版本,篮牙要更新BIOS.
壹年後……
平時冇點用,拎翻蒞諗住插支咪試下,壹插塊主板烧左,前后寄翻去3次,先肯换塊新RGBA版本,前後各壹條m.2磁碟,插4pin小喇叭著機BOOT.
以雜牌蒞講都算好,保养3年,壹年後烧左换新. 祗係記憶體吾兼容,間隙輕機. AID64記憶體測試報錯.舊版本返宜兼容記憶體.唯有降低頻率加大時序.
用『Ryzen DRAM Calculator』睇時序配置.
記憶體 | 默認值 | 修定後 |
MEM FREQUENCY(Mhz) 頻率 | 2400 | 2133 |
主時序配置 | ||
Tcl | 15 | 20 |
Trcdrd | 15 | 20 |
Trcdwr | 15 | 20 |
Trp | 15 | 20 |
Tras | 35 | 38 |
副時序配置 | ||
Trc | 0 | |
Trrds | 4 | |
Trrdl | 6 | |
Tfaw | 23 | |
Twtrs | 3 |
休眠喚醒後顯示器黑屏,要撳『power』鍵重啟.BIOS 已UPADAE.『Win10/Linux』皆係.
B450-ITX | RGBA版 |
m.2磁碟 | 2 |
BOOT-4pin | 1 |
rgba燈 | 2 |
4pin風扇 | 2 |
3pin風扇 | 2 |
DEBUG | 1 |
之前係老竇屋企砌臺ITX電腦愛蒞睇片,『BE200』新出買蒞試試, 點知係係『b450-itx』可以認藍牙,唔認WIFI.反而係『x99-itx』藍牙WIFI都認.
唯有『AX210』配『b450-itx』, 『BE200』配『x99-itx』.
下載最新Intel WiFi驅動.
係電腦發展初時定義左套『ASCII碼』,得128字符,英文加數字用單字節BYTE. 後蒞各國皆自定『字符編碼』,『Shift-JIS/EUC-KR/BIG5/GB2312』皆占两字節WORD,结果係編碼重叠.所以先有亂碼.
字 | Low 8bit | Height 8bit |
ASCII-128 | 0 ~ 0x7F | N/A |
BIG5漢字 | 0xA1 ~ 0xF9 | 0x40 ~ 0x7E
0xA1 ~ 0xFE |
SHIFT-JIS日字 | 0x81~0x9f
0xe0~0xef |
0x40~0x7e
0x80~0xfc |
EUC-KR韓字 | 0xA1~0xFE | 0xA1~0xFE |
GB2312中字 | 0xA1 ~ 0xF7 | 0xA1 ~ 0xFE |
GBK中字 | 0x81 ~ 0xFE | 0x40 ~ 0xFE |
『UTF-8』係Unicode『萬國碼』變體,首byte前缀標記字符長度.前缀0長度1, 前缀110長度2, 前缀1110長度3.以此类推.尾随byte前缀皆標記01.
『UTF-8』bin | 長度 |
bin:0xxxxxxx | 1 |
bin:110xxxxx 10xxxxxx | 2 |
bin:1110xxxx 10xxxxxx 10xxxxxx | 3 |
bin:11110xxx 10xxxxxx 10xxxxxx 10xxxxxx | 4 |
bin:111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx | 5 |
bin:1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx | 6 |
UTF-8判定
if ((utf8[0] & 0x80) == 0x00)
return 1; |
值小於0x80的ASCII字元 |
if ((utf8[0] & 0xE0) == 0xC0 &&
(utf8[1] & 0xC0) == 0x80) return 2; |
2字節UTF-8字符 |
if ((utf8[0] & 0xF0) == 0xE0 &&
(utf8[1] & 0xC0) == 0x80 && (utf8[2] & 0xC0) == 0x80) return 3; |
3字節UTF-8字符 |
if ((utf8[0] & 0xF8) == 0xF0 &&
(utf8[1] & 0xC0) == 0x80 && (utf8[2] & 0xC0) == 0x80 && (utf8[3] & 0xC0) == 0x80) return 4; |
4字節UTF-8字符 |
if ((utf8[0] & 0xFC) == 0xF8 &&
(utf8[1] & 0xC0) == 0x80 && (utf8[2] & 0xC0) == 0x80 && (utf8[3] & 0xC0) == 0x80 && (utf8[4] & 0xC0) == 0x80) return 5; |
5字節UTF-8字符 |
if ((utf8[0] & 0xFE) == 0xFC &&
(utf8[1] & 0xC0) == 0x80 && (utf8[2] & 0xC0) == 0x80 && (utf8[3] & 0xC0) == 0x80 && (utf8[4] & 0xC0) == 0x80 && (utf8[5] & 0xC0) == 0x80) return 6; |
6字节UTF-8字符 |
值小於0x80係ASCII字符集
if ((string[0] & 0x80) == 0x00)
return 1; |
BIG5漢字符集編碼范圍
if ((string[0] >= 0xA1 && string[0] <= 0xF9) &&
(string[1] >= 0x40 && string[1] <= 0x7E || string[1] >= 0xA1 && string[1] <= 0xFE) ) return 2; |
SHIFT-JIS日字符集編碼范圍
if ((string[0] >= 0x81 && string[0] <= 0xF9 ||
string[0] >= 0xe0 && string[0] <= 0xef) && (string[1] >= 0x40 && string[1] <= 0x7E || string[1] >= 0xA1 && string[1] <= 0xFE) ) return 2; |
EUC-KR韓字符集編碼范圍
if ((string[0] >= 0xA1 && string[0] <= 0xFE) &&
(string[1] >= 0xA1 && string[1] <= 0xFE)) return 2; |
GB2312中字符集編碼范圍
if ((string[0] >= 0xA1 && string[0] <= 0xF7) &&
(string[1] >= 0XA1 && string[1] <= 0XFE) ) return 2; |
GBK中字符集編碼范圍
if ((string[0] >= 0x81 && string[0] <= 0xFE) &&
(string[1] >= 0XA0 && string[1] <= 0XFE) ) return 2; |
係電腦發展初時.定義左套『ASCII碼』,得128字符,英文加數字用單字節BYTE. 後蒞各國皆自定『字符編碼』,『BIG5/GB2312』皆占两字節WORD,结果係編碼重叠.所以先有亂碼.
UNICODE『萬國碼』,各國各自有獨立編碼段,吾重叠,同『ASCII碼』兼容.
『UNICODE』係設計之初每字符占『2 BYTE』即『USC2』字符集. 但係『2 BYTE』够支持65535字符.所以後蒞有『USC4』占『4 BYTE』.
係同壹字符串USC2同USC4會混合出現.
但係『ASCII碼』只需單字節『1 BYTE』. 所以發明左『UTF-8』以節約地方.
『UTF-8』同『UNICODE』按照下表互為轉换.
Unicode『USC2』字符集HEX | 『UTF-8』bin |
0x0000~0x007F | 0xxxxxxx |
0x0080~0x07FF | 110xxxxx 10xxxxxx |
0x0800~0xFFFF | 1110xxxx 10xxxxxx 10xxxxxx |
為左係同壹字符串『USC2』同『USC4』混合出現.係『USC4』字符『低16bit』同『高16bit』分別加前缀標記.
『低16bit』加『0xD800』,『高16bit』加『0xDC00』,再加壹區域0x10000.
前缀標記『0xD800』『0xDC00』各占6bit,各净低10bit加埋有『20bit』.够支持 『1048576』字符
USC4-低16bit前缀標記 | 0xD800 | BIN:110110 00000 00000 |
USC4-高16bit前缀標記 | 0xDC00 | BIN:110111 00000 00000 |
USC4 | 前缀標記 | USC4=前缀標記+字符 |
低16bit | 0xD800 | BIN:110110 00000 00000 + BIN:xxxxxxxxxx |
高16bit | 0xDC00 | BIN:110111 00000 00000 + BIN:xxxxxxxxxx |
utf8 轉 usc4
首字節 | value = utf8[sour] & (0xFF >> (bytes + 1));
++sour; |
尾随字節 | for (int i = 1; i < bytes; ++i) {
value = value << 6; value = value | (utf8[sour] & 0x3f);// 提低6bit ++sour; } |
减壹區域 | value = value – 0x10000 |
低16bit | unicode[dest] = 0xD800 | ((value >> 10) & 0x3ff ); |
高16bit | unicode[dest+1] = 0xDC00 | ((value) & 0x3ff);
dest = dest + 2; |
utf8 轉 usc2
首字節 | value = utf8[sour] & (0xFF >> (bytes + 1));
++sour; |
尾随字節 | for (int i = 1; i < bytes; ++i) {
value = value << 6; value = value | (utf8[sour] & 0x3f); ++sour; } |
反轉字節 | v = (value >> 24) & 0xFF;
unicode[dest] = v; v = (value >> 16) & 0xFF; if (v != 0) { unicode[dest] = (unicode[dest] << 8) + v; ++dest; } |
反轉字節 | v = (value >> 8) & 0xFF;
unicode[dest] = v; v = value & 0xFF; if (v != 0) { unicode[dest] = (unicode[dest] << 8) + v; ++dest; } |
Usc4轉utf8
提取字符 | value = (unicode[sour] – 0xD800) << 10 | (unicode[sour + 1] – 0xDC00); |
加壹區域 | value = value + 0x10000; |
Usc2轉utf8
提取字符 | value = unicode[sour]; |
首字節 | utf8[dest] = (0xFF << (8 – bytes)) | (value >> ((bytes – 1) * 6));
++dest; |
尾随字節 | for (int i = 1; i < bytes; ++i) {
utf8[dest] = 0x80 | (value >> ((bytes – i – 1) * 6) & 0x3F); ++dest; } ++sour; |
『UTF-8』首byte,前缀標記字符長度. 前缀0長度1, 前缀110長度2, 前缀1110長度3. 以此类推.尾随byte前缀皆標記01.
『UTF-8』bin | 長度 |
bin:0xxxxxxx | 1 |
bin:110xxxxx 10xxxxxx | 2 |
bin:1110xxxx 10xxxxxx 10xxxxxx | 3 |
bin:11110xxx 10xxxxxx 10xxxxxx 10xxxxxx | 4 |
bin:111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx | 5 |
bin:1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx | 6 |
按首BIT符號,計算UTF8字符長度,返回0非UFT8字符.
『UTF-8』字符 | |
if ((utf8[0] & 0x80) == 0x00)
return 1; |
0xxxxxxx |
if ((utf8[0] & 0xE0) == 0xC0 &&
(utf8[1] & 0xC0) == 0x80) return 2; |
110xxxxx 10xxxxxx |
if ((utf8[0] & 0xF0) == 0xE0 &&
(utf8[1] & 0xC0) == 0x80 && (utf8[2] & 0xC0) == 0x80) return 3; |
1110xxxx
10xxxxxx 10xxxxxx |
if ((utf8[0] & 0xF8) == 0xF0 &&
(utf8[1] & 0xC0) == 0x80 && (utf8[2] & 0xC0) == 0x80 && (utf8[3] & 0xC0) == 0x80) return 4; |
11110xxx
10xxxxxx 10xxxxxx 10xxxxxx |
if ((utf8[0] & 0xFC) == 0xF8 &&
(utf8[1] & 0xC0) == 0x80 && (utf8[2] & 0xC0) == 0x80 && (utf8[3] & 0xC0) == 0x80 && (utf8[4] & 0xC0) == 0x80) return 5; |
111110xx
10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx |
if ((utf8[0] & 0xFE) == 0xFC &&
(utf8[1] & 0xC0) == 0x80 && (utf8[2] & 0xC0) == 0x80 && (utf8[3] & 0xC0) == 0x80 && (utf8[4] & 0xC0) == 0x80 && (utf8[5] & 0xC0) == 0x80) return 6; |
1111110x
10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx |
unicode轉utf8 , ASCII碼相等.
int UnicodeToUTF8(char * utf8, const wchar_t * unicode)
{ int unicodeLength = 0; int bytes; int dest, sour; DWORD value; unicodeLength = Unicode_Length(unicode) ; sour = dest = 0; while (sour < unicodeLength) { bytes = 1; if (unicode[sour] >= 0xD800 && unicode[sour + 1] >= 0xDC00) bytes = 4; else if (unicode[sour] >= 0x00 && unicode[sour] <= 0x7F) bytes = 1; else if (unicode[sour] >= 0x80 && unicode[sour] <= 0x7FF) bytes = 2; else if (unicode[sour] >= 0x800 && unicode[sour] <= 0xFFFF) bytes = 3; else if (((unicode[sour + 1] << 16) | unicode[sour]) >= 0x10000 && ((unicode[sour + 1] << 16) | unicode[sour]) <= 0x1FFFFF) bytes = 4; else if (((unicode[sour + 1] << 16) | unicode[sour]) >= 0x200000 && ((unicode[sour + 1] << 16) | unicode[sour]) <= 0x3FFFFFF) bytes = 5; else if (((unicode[sour + 1] << 16) | unicode[sour]) >= 0x4000000 && ((unicode[sour + 1] << 16) | unicode[sour]) <= 0x7FFFFFFF) bytes = 6; else if (((unicode[sour + 1] << 16) | unicode[sour]) >= 0x80000000) bytes = 7;
if (bytes == 1) { utf8[dest] = unicode[sour]; ++dest; ++sour; } else if (unicode[sour] >= 0xD800 && unicode[sour + 1] >= 0xDC00) { value = (unicode[sour] – 0xD800) << 10 | (unicode[sour + 1] – 0xDC00); value = value + 0x10000; utf8[dest] = (0xFF << (8 – bytes)) | (value >> ((bytes – 1) * 6)); ++dest; for (int i = 1; i < bytes; ++i) { utf8[dest] = 0x80 | (value >> ((bytes – i – 1) * 6) & 0x3F); ++dest; } sour = sour + 2; } else if (bytes == 2 || bytes == 3) { value = unicode[sour]; utf8[dest] = (0xFF << (8 – bytes)) | (value >> ((bytes – 1) * 6)); ++dest; for (int i = 1; i < bytes; ++i) { utf8[dest] = 0x80 | (value >> ((bytes – i – 1) * 6) & 0x3F); ++dest; } ++sour; } else if (bytes >= 4) { value = (unicode[sour + 1] << 16) | unicode[sour]; utf8[dest] = (0xFF << (8 – bytes)) | (value >> ((bytes – 1) * 6)); ++dest; for (int i = 1; i < bytes; ++i) { utf8[dest] = 0x80 | (value >> ((bytes – i – 1) * 6) & 0x3F); ++dest; } sour = sour + 2; } } utf8[dest] = NULL; return dest; } |
utf8 轉 unicode
int UTF8ToUnicode(wchar_t * unicode, const char* utf8)
{ int utf8Length; int sour, dest; int bytes; dest = sour = 0; DWORD value; BYTE v; utf8Length = strlen(utf8); while (sour < utf8Length) { if ((utf8[sour] & 0x80) == 0x00) bytes = 1; else if ((utf8[sour] & 0xE0) == 0xC0) bytes = 2; else if ((utf8[sour] & 0xF0) == 0xE0) bytes = 3; else if ((utf8[sour] & 0xF8) == 0xF0) bytes = 4; else if ((utf8[sour] & 0xFC) == 0xF8) bytes = 5; else if ((utf8[sour] & 0xFE) == 0xFC) bytes = 6; else bytes = 7; if (bytes == 1) { unicode[dest] = utf8[sour]; ++dest; ++sour; } else if (bytes == 2 || bytes == 3) { value = utf8[sour] & (0xFF >> (bytes + 1)); ++sour; for (int i = 1; i < bytes; ++i) { value = value << 6; value = value | (utf8[sour] & 0x3f); ++sour; }
v = (value >> 24) & 0xFF; unicode[dest] = v; v = (value >> 16) & 0xFF; if (v != 0) { unicode[dest] = (unicode[dest] << 8) + v; ++dest; }
v = (value >> 8) & 0xFF; unicode[dest] = v; v = value & 0xFF; if (v != 0) { unicode[dest] = (unicode[dest] << 8) + v; ++dest; } } else if (bytes >= 4 ) { value = utf8[sour] & (0xFF >> (bytes + 1)); ++sour; for (int i = 1; i < bytes; ++i) { value = value << 6; value = value | (utf8[sour] & 0x3f); ++sour; } value = value – 0x10000; unicode[dest] = 0xD800 | ((value >> 10) & 0x3ff ); unicode[dest+1] = 0xDC00 | ((value) & 0x3ff); dest = dest + 2; } }
unicode[dest] = NULL; return dest; } |
『Android Studio』默認utf8編碼. 而『Visual Studio』按『地區設定』,轉本地字符編碼.
要强轉utf8可以係字加『u8』前缀
char utf8[MAX_CHAR] = u8″abcdef屌㞗𡳞杘屄”; |
加『u8』前缀後,代碼移稙『Android Studio』繁鎖.可以加編譯詣令.
#pragma execution_character_set(“utf-8”) |
适宜字符寫死係代碼. 若将字符保存係外部文檔,存為utf8即軟代碼.唔使諗編碼.
要强轉unicode係字加『L』前缀.USC2同USC4混埋.
wchar_t unicode[MAX_CHAR] = L”屌㞗𡳞杘屄”; |
經緯度座標有叄種格式,『度分秒』『度分』『度』.
『度分秒』等於『時分秒』, 『1度=60分=3600秒』『1分=60秒』
經緯度座標 | |
度分秒DMS | DDD°MM’SS” |
度分DM | DDD°MM.MMM’ |
度D | DDD.DDDDD° |
度分秒 | 轉换 |
分轉度 | 除60 |
秒轉度 | 除3600 |
秒轉分 | 除60 |
度轉分 | 度小數乘60 |
分轉秒 | 分小數乘60 |
『度分秒』轉『度』
例『35°41′37.5″』即係『35度41分37.5秒』 |
41分轉度= 41/60 |
37.5秒轉度=37.5/3600 |
35 + 41/60 + 37.5/3600=35.69375度 |
void DMS_TO_DD(float D,float M,float S,double * DD)
{ *DD = D + M/60.0f + S/3600.0f; } |
『度分』轉『度』
例『35°41.625』即係『35度41.625分』 |
41.625分轉度= 41/60 |
35 + 41.625/60 =35.69375度 |
void DM_TO_DD(float D, float M, double* DD)
{ *DD = D + M / 60.0f; // 除60 } |
『度』轉『度分』
例『35.6937632°』即係『35度41.625792分』 |
『0.6937632°』度轉分 0.6937632*60=41.625792′ |
35 + 0.6937632*60=『35°41.625792’』=『35度41.625792分』 |
void DD_TO_DM(double DD,int * D,float * M)
{ *D = (int)DD; // 度取整 *M = (DD – *D) * 60; // 度小數乘60 } |
『度』轉『度分秒』
例『35.6937632°』度即係『35度, 41分, 37.54秒』 |
取度小數『0.6937632°』度轉分 0.6937632°*60=41.625792′ |
取分小數『0.625792’』分轉秒 0.625792’*60=37.54752″ |
35°+ 0.6937632°*60 + 0.625792’*60=『35°41′37.5″』=『35度, 41分, 37.54秒』 |
void DD_TO_DMS(double DD, float* D, float* M, float* S)
{ float MM; *D = (int)DD; // 度取整 MM = (DD – *D) * 60; // 度小數乘60 *M = (int)MM;// 分 *S = (*M – MM) * 60;// 分小數乘60 } |
1日 | 360度 |
1度 | 60分=3600秒 |
1分 | 60秒 |
係Windows拖拽或者縮放窗口, 會造成窗體閃爍, 啟用象筋拖放, 即係非實時拖放,可避免窗體閃爍.
進入像筋拖放 |
SystemParametersInfo(SPI_SETDRAGFULLWINDOWS, true, &drag_full_windows, NULL); |
退出像筋拖放 |
SystemParametersInfo(SPI_SETDRAGFULLWINDOWS, false, &drag_full_windows, NULL); |
通過監聽『WM_ENTERSIZEMOVE』進入拖拽, 『WM_EXITSIZEMOVE』退出像筋拖拽, 實施像筋象筋拖放
LRESULT CALLBACK WindowProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam){ |
if (msg == WM_ENTERSIZEMOVE)
SystemParametersInfo(SPI_SETDRAGFULLWINDOWS, true, &drag_full_windows, NULL);// 進入像筋拖放 else |
if (msg == WM_EXITSIZEMOVE)
SystemParametersInfo(SPI_SETDRAGFULLWINDOWS, false, &drag_full_windows, NULL);// 退出像筋拖放 |
return(DefWindowProc(hWnd, msg, wParam, lParam));
} |
WD BLACK AN1500原配两條SN730仲有ARGB燈,有人拆出蒞䶒賣殼.睇中佢自動组建Raid0,讀寫至高達『6500MB/S』,諗住買翻『SN730-1TB』, 睇到『PC300-1TB』特價,仲係『MLC SSD』. 1TB仲係1024GB.
打孖插入『PC300-1TB』自建Raid0. 温度高達65℃. 讀『3800 MB/S』,寫『2194MB/S』. 比『SN730』慢.
WD BLACK AN1500-Raid0 | PC300 NVMe SK Hynix 1TB*2 |
CrystalDiskMark讀 | 2800 MB/S |
CrystalDiskMark寫 | 2194MB/S |
CrystalDiskInfo | 69℃. |
MLC SSD | SK Hynix H2702T8C0B3A |
WD AN1500 | |
上行 | 6500MB/S |
下行 | 6500MB/S |
總線 | PCIe Gen3*4 SSD |
『ZLIB』係開源『壓縮』同『解壓』程式庫, 支持『DEFLATE』冇損壓縮算法,混合『LZ77算法』同『霍夫曼編碼』.
『Visual studio』冇內置『ZLIB』,下載『zlib-1.2.13.tar.gz』再編譯.
http://www.zlib.net/ |
http://www.zlib.net/zlib-1.2.13.tar.gz |
路徑 | 版本 |
C:\Program Files (x86)\zlib-1.2.13\build\Debug | Debug |
C:\Program Files (x86)\zlib-1.2.13\build\Release | Release |
Debug調試版 | Release發行版 | |
zlibstaticd.lib | zlibstatic.lib | 静態庫, 唔使dll |
zlibd.lib | zlib.lib | 動態庫, 要dll |
zlibd.dll | zlib.dll | 動態連结 |
C:\Program Files\zlib\include\zconf.h | Zlib-API |
C:\Program Files\zlib\include\zlib.h |
#include <zlib.h> | Zlib-api |
#include <zconf.h> |
#if _DEBUG | |
#pragma comment(lib, “..\\ZLIB\\zlibstaticd.lib”)
#else |
|
#pragma comment(lib, “..\\ZLIB\\zlibstatic.lib”)
#endif |
『CMake』愛蒞生成makefile或project文件, 畀Visual studio編譯代碼.
登入『CMake官網』下載『cmake-3.27.7-windows-x86_64.msi』安装包.
驗証CMake安装
https://cmake.org/ |
https://cmake.org/download/ |
cmake-3.28.0-rc3-windows-x86_64.msi |
cmake-3.27.7-windows-x86_64.msi |
上次『USB3.0壹拆貳』插『SD讀卡機』冇反應,改買臺彎汤銘TERMINUS-FE2.1芯片,『USB2.0 壹拆肆』.聽講兼容冚辦闌USB2.0機體.
冇定位窿, 3D打印磁吸底座,吸係機槓壁.配線够長.
部『SD讀卡機』係USB3.0-19PIN,要轉9PIN.好彩識認.
華南X99-F8D Plus
臺X570冇定時輕機,睇翻佢本天書,要用『1R8/2R8-DDR4』記憶體,買两條32GB成千幾紋,索性買雜牌X99玩,開機慢到以為吾著. 壹分鐘先睇到bios logo
配置如下
雜牌X99-F8D Plus有捌條DDR4槽, 單條支持至高64GB.捌條槽最高512GB.DDR4-64GB依然偏貴.块X99話支持肆通道.買两條用住先.
買左雜牌『X99-F8D PLUS』, 睇岩『E5-2637 V4』支持雙U,頻率至高.『基頻3.5GHZ』畀『E5-1630V4』低200HZ.
用CPU-Z測單線程相若. 多線程跑分接近壹倍. 可能同雙CPU有關.
INTEL XEON | E5-2637V4 | E5-1630V4 | E5-2630LV3 |
CPU-Z單線程 | 462.4 | 470.7 | 233.2 |
CPU-Z多線程 | 4368.2 | 2350.2 | 2136.7 |
主頻 | 3.5GHZ | 3.7GHZ | 1.8GHZ |
核心 | 4核 | 4核 | 8核 |
線程 | 8線程 | 8線程 | 16線程 |
TDW | 140W | 140W | 55W |
買左雜牌『x99-EATX』,舊式ATX機槓要拆左光驅位支架.冇臺鉆拆拉釘驚拆爛.索性新買EATX機槓W100,分左右腔.10條PCIE槽位,有主板要11條PCIE槽位.
左腔裝主板同風扇,為左装『23030風扇』要移有機玻璃去門板外側.
右腔得86mm寬,装3.5寸機體同埋atx火牛都掹水,早知買W200吾使搞甘耐.
雜牌x99-eatx係登入Win10間謁會Te
eDriverW8x64.sys蓝屏. 心諗雜牌都係信唔過.
『TeeDriverW8x64.sys』係『Intel(R) Management Engine Interface』英特爾®管理引擎介面驅動程式.
『剷TeeDriverW8x64.sys』
新EATX機槓裝9把『200風扇』. BNFENIX-3PIN白色『230風扇』,為左装係『200扇位』削去两側. 9扇葉設計,扇速慢得800轉.9把『230風扇』要風扇集線器.
230扇葉大易斷扇軸,冇适合鐵網保謢扇葉.
PC-FAN 23030 | 數值 |
尺碼 | 230*30mm |
電壓 | 12V |
電流 | 0.18A |
Materials | PBT |
Speed(R.P.M.) | 700~900轉/分 |
噪聲 | 20(dB-A) |
厚 | 25MM |
窿徑 | 4MM |
前幾日打印『SOCKET-2011風扁支架』,ABS打印90*90MM梗有壹角收縮翘邊.搞左幾日最後502黐死底座,要重黐美紋紙.
睇『噴砂磁鋼板平臺』分两層,下層磁貼底座,3M背胶黐住熱床. 上層係噴砂磁鋼,靠下層磁貼吸死.
厰家指南熱唔超80℃.事實比美紋紙仲衰,打印ABS只有熱床上到110℃,先睇到效果.等熱床降温後自動分離.
X99-EATX愛两正方SOCKET-2011散熱. 唔諗買『熱導管散熱』.學上次咁買两拆機銅散熱,正方『90mm*90mm』, 配两『AVC-9025-12V-0.13A』.風扇底座用3D打印. 尺寸太大ABS容易收縮變形.
舊時『游戲紋理』再用『.bmp格式』, 冇壓缩即使256色盤依然佔用吉間.
『.PNG格式』利LZ77且冇失真壓縮. 且壓縮極高, 配合256色盤,适宜作『游戲紋理』.
數據塊 | 數值 |
PNG圖檔標誌 | 0x89 0x50 0x4E 0x47 0x0D 0x0A 0x1A 0x0A |
圖檔頭 | IHDR |
调色板 | PLTE |
图像数据 | IDAT |
图像结束 | IEND |
PNG數據塊基本結构.
數據塊結构 | size | 簡介 |
LENGTH | 整數4字節 | 數據長度 |
CHUNK TYPE | 整數4字節 | 類型標記 |
CHUNK DATA | 0~2^32字節 | 數據 |
CRC32 | 整數4字節 | CRC32校驗 |
两字節肆字節數據,冚辦闌用『網络字節』存儲,需轉『主機字節』.
『網络字節』轉『主機字節』 |
#define PNG_VALUE32(v) ((v & 0xff000000) >> 24 | (v & 0x00ff0000) >> 8 | (v & 0x0000ff00) << 8 | (v & 0x000000ff) << 24) |
#define PNG_VALUE16(v) ((v & 0xff00) >> 8 | (v & 0x00ff) << 8) |
游戲引擎需讀PNG 伍個數據塊
PNG數據塊 | 功能簡介 |
IHDR | 文檔頭 |
PLTE | 色盤 |
IDAT | 圖像數值 |
IEND | 結束 |
tRNS | 圖像透明 |
bKGD | 背景色 |
PNG圖檔頭捌字節標記,愛蒞識别PNG
0x89 | 0x50 | 0x4E | 0x47 | 0x0D | 0x0A | 0x1A | 0x0A |
137 | P | N | G | \r | \n | 26 | \n |
對比PNG標識
if(memcmp(data, 0x0A1A0A0D474E5089, 8) != 0)
return false;// 非png圖檔 |
CRC32計算必需計『CHUNK TYPE + CHUNK DATA』, 長度『length + 4』而得.
DWORD length = PNG_VALUE32(chunk->length) + 4; | 長 |
DWORD64 crc = CRC32((PBYTE)(chunk) + 4,length); | CRC32計算 |
DWORD64 crc_ = PNG_VALUE32(chunk->crc_); | 轉主機字節 |
if(crc_ == crc)
return true;
|
比較crc值 |
首先定義PNG結构
typedef struct PNG_TAG{ | |
int width; | 圖宽 |
int height; | 圖高 |
int bitCount; | 位圖像素bits 8位,16位,24位,32位 |
PNG_RGBA palette[256]; | 调色板 |
PBYTE buffer; | 圖像数据 |
int buffer_size; | 圖像数据長度 |
int length; | 临時變量 |
z_stream stream; | ZLIB解壓 |
} PNG, *PNG_PTR; |
文檔頭結构 IHDR
typedef struct PNG_IHDR_TAG{ | 文檔頭 IHDR |
int length; | Data長度 |
DWORD type; | 標記’IHDR’ |
DWORD width; | 像素寬 |
DWORD height; | 像素高 |
BYTE BitDepth; | 圖像深度 |
BYTE ColorType; | 顏色類型 |
BYTE Compression; | LZ77派生演算法 ,壹定係0 |
BYTE Filter; | 濾波,止值定0. 事實『0,1,2,3,4』伍種濾波 |
BYTE Interlace; | 隔行掃描0=冇掃描,1=(Adam7 interlace) |
DWORD CRC32; | CRC32校驗 |
}PNG_IHDR,*PNG_IHDR_PTR; |
PNG支緩伍款顏色類型
ColorType | 顏色類型 | 像素 |
0=Greyscale | 灰度圖像 | 1,2,4,8,16bit |
2=Truecolour | 真彩色圖像 | 8,16bit |
3=Indexed-colour | 索引彩色圖像 | 1,2,4,8bit |
4=Greyscale with alpha | 帶α通道資料灰度圖像 | 8,16bit |
6=Truecolour with alpha | 帶α通道資料真彩色圖像 | 8,16bit |
像素排列
ColorType | 像素排列 |
Greyscale | Y |
Truecolour | RGB |
Indexed-colour | i |
Greyscale with alpha | RGBA |
Truecolour with alpha | YA |
解析文檔頭 IHDR, 分配圖像時分, 每行像素多壹字節,記錄『Filter』濾波值,『0,1,2,3,4』伍種濾波;
if(IHDR->ColorType == 0)
png->bitCount = IHDR->BitDepth; |
0:Greyscale:灰度圖像,1,2,4,8,16bit |
if(IHDR->ColorType == 2)
png->bitCount = IHDR->BitDepth * 3; |
2:Truecolour:真彩色圖像,8,16bit |
if(IHDR->ColorType == 3)
png->bitCount = IHDR->BitDepth; |
3:Indexed-colour:索引彩色圖像,1,2,4,8bit |
if(IHDR->ColorType == 4)
png->bitCount = IHDR->BitDepth * 2; |
4:Greyscale with alpha:帶α通道資料灰度圖像,8,16bit |
if(IHDR->ColorType == 6)
png->bitCount = IHDR->BitDepth * 4; |
6:Truecolour with alpha:帶α通道資料真彩色圖像,8,16bit |
png->width = PNG_VALUE32(IHDR->width); | 像素寬 |
png->height = PNG_VALUE32(IHDR->height); | 像素高 |
int byte_count = (float)png->bitCount / 8.0f; | 像素大小 BIT to BYTE |
png->buffer_size = (png->width * png->height * byte_count) + (png->height * 1); | 圖像数据長度,每行多壹字節 |
png->buffer = (PBYTE)malloc(png->buffer_size); | 圖像数据 |
定義色盤RGB
typedef struct PNG_RGB_TYP { | 色盤3字節 |
BYTE red; | 紅 |
BYTE green; | 錄 |
BYTE blue; | 蓝 |
} PNG_RGB, *PNG_RGB_PTR; |
定義色盤RGBA
typedef struct PNG_RGBA_TYP { | 色盤4字節 |
BYTE red; | 紅 |
BYTE green; | 錄 |
BYTE blue; | 蓝 |
BYTE alpha; | 透明混合,透明0x00~實體0xFF |
} PNG_RGBA, *PNG_RGBA_PTR; |
定義PNG色盤結构 ‘PLTE’
typedef struct PNG_PLTE_TYP { | |
int length; | Data長度 |
DWORD type; | 標記’PLTE’ |
PNG_RGB palette[256]; | 至多256色盤 |
DWORD CRC32; | CRC32校驗 |
} PNG_PLTE, *PNG_PLTE_PTR; |
分析PNG色盤 ‘PLTE’
int length = PNG_VALUE32(chunk->length); | 長度 |
int count = length / 3; | 色盤量 |
for(int index = 0; index < count; ++index){ | |
png->palette[index].red = PLTE->palette[index].red ; | 紅 |
png->palette[index].green = PLTE->palette[index].green ; | 錄 |
png->palette[index].blue = PLTE->palette[index].blue ; | 蓝 |
png->palette[index].alpha = 0xff; } | 透明0x00~實體0xFF |
定義透明像素結构’tRNS’
typedef struct PNG_tRNS_TYP{ | |
int length; | 數據長度 |
DWORD type; | 標記’tRNS’ |
union { | |
WORD grey; | 顏色類型 0 |
struct {WORD Red,Green,Blue;}; | 顏色類型 2 |
BYTE palette[256]; | 顏色類型 3 |
DWORD CRC32; | CRC32校驗 |
}PNG_tRNS,*PNG_tRNS_PTR; |
分析透明像素
PNG_tRNS_PTR tRNS; | 透明像素 |
tRNS->length = PNG_VALUE32(tRNS->length); | 數據長度 |
if(IHDR->ColorType == 0 )
tRNS->grey = PNG_VALUE16(tRNS->grey); |
0:Greyscale:灰度圖像,1,2,4,8,16bit |
if(IHDR->ColorType == 2 ) {
tRNS->Red = PNG_VALUE16(tRNS->Red); tRNS->Green = PNG_VALUE16(tRNS->Green); tRNS->Blue = PNG_VALUE16(tRNS->Blue); } |
2:Truecolour:真彩色圖像,8,16bit |
if(IHDR->ColorType == 3) {
length = tRNS->length; for(int i = 0; i < length; ++i) { index = tRNS->palette[i]; png->palette[index].alpha = 0x00; } |
3:Indexed-colour:索引彩色圖像,1,2,4,8bit
透明0x00~實體0xFF |
定義背景色結构 ‘bKGD’
typedef struct PNG_bKGD_TYP{ | |
int length; | Data長度 |
DWORD type; | 標記’bKGD’ |
union { | |
WORD Greyscale; | 顏色類型0 and 4灰度 |
struct{WORD Red,Green,Blue;}; | 顏色類型2 and 6 -RGB三色 |
BYTE Palette_Index;}; | 顏色類型3色盤索引 |
DWORD CRC32; | CRC32校驗 |
}PNG_bKGD,*PNG_bKGD_PTR; |
分析背景色’bKGD’
int length = PNG_VALUE32(bKGD->length); | 長度 |
if(IHDR->ColorType == 0 || IHDR->ColorType == 4)
bKGD->Greyscale = PNG_VALUE16(bKGD->Greyscale); |
灰度圖像 – 帶α通道資料灰度圖像 |
if(IHDR->ColorType == 2 || IHDR->ColorType == 6) {
bKGD->Red = PNG_VALUE16(bKGD->Red); bKGD->Green = PNG_VALUE16(bKGD->Green); bKGD->Blue = PNG_VALUE16(bKGD->Blue); } |
真彩色圖像 – 帶α通道資料真彩色圖像 |
if(IHDR->ColorType == 3)
bKGD->Palette_Index = bKGD->Palette_Index; |
索引彩色圖像 |
定義圖像數值結构 ‘IDAT’, 止數據塊可能有多個.
typedef struct PNG_IDAT_TYP { | |
int length; | Data長度 |
DWORD type; | 標記’PLTE’ |
BYTE data[1]; | 經壓縮圖像數據 |
DWORD CRC32; | CRC32校驗 |
} PNG_IDAT, *PNG_IDAT_PTR; |
每行像素多壹字節,記錄『Filter』濾波值,『0,1,2,3,4』伍種濾波;
int length = PNG_VALUE32(IDAT->length); | 長度 |
int size = png->buffer_size – png->length; | 剩余記憶體 |
Uncompress_Data_gZip(png->buffer + png->length, &size,
IDAT->data,length, &png->stream); |
解压 |
png->length = png->length + size; | 累積積數據長度 |
結束 IEND,檢測到’IEND’數據塊,己到文檔未端.
typedef struct PNG_IEND_TAG{ | |
int length; | Data長度0 |
DWORD type; | 標記’IEND’ |
DWORD CRC32; | CRC32校驗 |
}PNG_IEND, *PNG_IEND_PTR; |
以顏色類型分別進行『反濾波』, 係每行像素首字節『濾波』值,有『0,1,2,3,4』伍款濾波, 以每粒像素單獨『復位』,帶α通道真彩色圖像8bit為例.
以cbax像素排列支缓伍款濾波
c | b |
a | x |
濾波算法
filter濾波 | 濾波 | 復位 |
0= None | Filt(x) = Orig(x) | Recon(x) = Filt(x) |
1= Sub | Filt(x) = Orig(x) – Orig(a) | Recon(x) = Filt(x) + Recon(a) |
2= Up | Filt(x) = Orig(x) – Orig(b) | Recon(x) = Filt(x) + Recon(b) |
3= Average | Filt(x) = Orig(x) – floor((Orig(a) + Orig(b)) / 2) | Recon(x) = Filt(x) + floor((Recon(a) + Recon(b)) / 2) |
4= Paeth | Filt(x) = Orig(x) – PaethPredictor(Orig(a), Orig(b), Orig(c)) | Recon(x) = Filt(x) + PaethPredictor(Recon(a), Recon(b), Recon(c)) |
復位算法
int byte_count = 4; | 每粒像素4字節 |
int pixel_size = png->width * png->height; | 總像素量 |
int buffer_size = png->width * png->height * byte_count; | 總字節量 |
PBYTE buffer = (PBYTE)malloc(buffer_size); | 反濾波影像數據 |
int col_size_recon = (png->width * 4) ; | 復位後每行字節量 |
int col_size_filt = (png->width * 4) + 1; | 濾波後每行字節量 |
for(int j = 0; j < png->height ; ++j) | 每行像素 |
int filter = png->buffer[col_size_filt * j]; | 行首濾波=1 byte |
處理filter濾波0= None
if(filter == 0) { | None |
for(int i = 0; i < png->width; ++i){ | 逐像素復位 |
Red = png->buffer[(col_size_filt * j) + 1 + (i * 4) + 0]; | x像素紅色 |
Green = png->buffer[(col_size_filt * j) + 1 + (i * 4) + 1]; | x像素藍色 |
Blue = png->buffer[(col_size_filt * j) + 1 + (i * 4) + 2]; | x像素錄色 |
Alpha = png->buffer[(col_size_filt * j) + 1 + (i * 4) + 3]; | x像素透明 |
buffer[(col_size_recon * j) + (i * 4) + 0] = Red; | 復位像素紅色 |
buffer[(col_size_recon * j) + (i * 4) + 1] = Green; | 復位像素藍色 |
buffer[(col_size_recon * j) + (i * 4) + 2] = Blue; | 復位像素綠色 |
buffer[(col_size_recon * j) + (i * 4) + 3] = Alpha; }} | 復位像素透明 |
處理filter濾波1 =Sub
if(filter == 1) { | Sub |
for(int i = 0; i < png->width; ++i){ | 逐像素復位 |
Red = png->buffer[(col_size_filt * j) + 1 + (i * 4) + 0]; | x像素紅色 |
Green = png->buffer[(col_size_filt * j) + 1 + (i * 4) + 1]; | x像素藍色 |
Blue = png->buffer[(col_size_filt * j) + 1 + (i * 4) + 2]; | x像素錄色 |
Alpha = png->buffer[(col_size_filt * j) + 1 + (i * 4) + 3]; | x像素透明 |
aRed = aGreen = aBlue = aAlpha = 0; | 清零 |
if(i > 0) { | |
aRed = buffer[(col_size_recon * j) + ((i-1) * 4) + 0]; | a像素紅色 |
aGreen = buffer[(col_size_recon * j) + ((i-1) * 4) + 1]; | a像素藍色 |
aBlue = buffer[(col_size_recon * j) + ((i-1) * 4) + 2]; | a像素綠色 |
aAlpha = buffer[(col_size_recon * j) + ((i-1) * 4) + 3]; } | a像素透明 |
buffer[(col_size_recon * j) + (i * 4) + 0] = Red + aRed; | 復位像素紅色 |
buffer[(col_size_recon * j) + (i * 4) + 1] = Green + aGreen; | 復位像素藍色 |
buffer[(col_size_recon * j) + (i * 4) + 2] = Blue + aBlue; | 復位像素綠色 |
buffer[(col_size_recon * j) + (i * 4) + 3] = Alpha + aAlpha; }} | 復位像素透明 |
處理filter濾波2 =Up
if(filter == 2){ | Up |
for( i = 0; i < png->width; ++i){ | 逐像素復位 |
Red = png->buffer[(col_size_filt * j) + 1 + (i * 4) + 0]; | x像素紅色 |
Green = png->buffer[(col_size_filt * j) + 1 + (i * 4) + 1]; | x像素藍色 |
Blue = png->buffer[(col_size_filt * j) + 1 + (i * 4) + 2]; | x像素錄色 |
Alpha = png->buffer[(col_size_filt * j) + 1 + (i * 4) + 3]; | x像素透明 |
bRed = bGreen = bBlue = bAlpha = 0; | 清零 |
if(j > 0) { | |
bRed = buffer[(col_size_recon * (j-1)) + (i * 4) + 0]; | b像素紅色 |
bGreen = buffer[(col_size_recon * (j-1)) + (i * 4) + 1]; | b像素藍色 |
bBlue = buffer[(col_size_recon * (j-1)) + (i * 4) + 2]; | b像素綠色 |
bAlpha = buffer[(col_size_recon * (j-1)) + (i * 4) + 3];} | b像素透明 |
buffer[(col_size_recon * j) + (i * 4) + 0] = Red + bRed; | 復位像素紅色 |
buffer[(col_size_recon * j) + (i * 4) + 1] = Green + bGreen; | 復位像素藍色 |
buffer[(col_size_recon * j) + (i * 4) + 2] = Blue + bBlue; | 復位像素綠色 |
buffer[(col_size_recon * j) + (i * 4) + 3] = Alpha + bAlpha; }} | 復位像素透明 |
處理filter濾波3 = Average
if(filter == 3) { | Average |
for( i = 0; i < png->width; ++i){ | 逐像素復位 |
Red = png->buffer[(col_size_filt * j) + 1 + (i * 4) + 0]; | x像素紅色 |
Green = png->buffer[(col_size_filt * j) + 1 + (i * 4) + 1]; | x像素藍色 |
Blue = png->buffer[(col_size_filt * j) + 1 + (i * 4) + 2]; | x像素錄色 |
Alpha = png->buffer[(col_size_filt * j) + 1 + (i * 4) + 3]; | x像素透明 |
aRed = aGreen = aBlue = aAlpha = 0; | 清零 |
bRed = bGreen = bBlue = bAlpha = 0; | 清零 |
if(i > 0) { | |
aRed = buffer[(col_size_recon * j) + ((i-1) * 4) + 0]; | a像素紅色 |
aGreen = buffer[(col_size_recon * j) + ((i-1) * 4) + 1]; | a像素藍色 |
aBlue = buffer[(col_size_recon * j) + ((i-1) * 4) + 2]; | a像素綠色 |
aAlpha = buffer[(col_size_recon * j) + ((i-1) * 4) + 3]; } | a像素透明 |
if(j > 0) { | |
bRed = buffer[(col_size_recon * (j-1)) + (i * 4) + 0]; | b像素紅色 |
bGreen = buffer[(col_size_recon * (j-1)) + (i * 4) + 1]; | b像素藍色 |
bBlue = buffer[(col_size_recon * (j-1)) + (i * 4) + 2]; | b像素綠色 |
bAlpha = buffer[(col_size_recon * (j-1)) + (i * 4) + 3];} | b像素透明 |
buffer[(col_size_recon * j) + (i * 4) + 0] = Red + ((aRed+bRed)/2); | 復位像素紅色 |
buffer[(col_size_recon * j) + (i * 4) + 1] = Green + ((aGreen+bGreen)/2); | 復位像素藍色 |
buffer[(col_size_recon * j) + (i * 4) + 2] = Blue + ((aBlue+bBlue)/2); | 復位像素綠色 |
buffer[(col_size_recon * j) + (i * 4) + 3] = Alpha + ((aAlpha+bAlpha)/2); }} | 復位像素透明 |
Paeth預測函式
BYTE PaethPredictor_PNG(BYTE a,BYTE b,BYTE c){ | 預測函式 |
int p; | |
int pa,pb,pc; | |
p = a + b – c; | |
pa = abs(p – a); | |
pb = abs(p – b); | |
pc = abs(p – c); | |
if (pa <= pb && pa <= pc ) return a; | |
else if (pb <= pc ) return b; | |
else return c;} |
處理filter濾波4 =Paeth預測
if(filter == 3) { | Average |
for( i = 0; i < png->width; ++i){ | 逐像素復位 |
Red = png->buffer[(col_size_filt * j) + 1 + (i * 4) + 0]; | x像素紅色 |
Green = png->buffer[(col_size_filt * j) + 1 + (i * 4) + 1]; | x像素藍色 |
Blue = png->buffer[(col_size_filt * j) + 1 + (i * 4) + 2]; | x像素錄色 |
Alpha = png->buffer[(col_size_filt * j) + 1 + (i * 4) + 3]; | x像素透明 |
aRed = aGreen = aBlue = aAlpha = 0; | 清零 |
bRed = bGreen = bBlue = bAlpha = 0; | 清零 |
cRed = cGreen = cBlue = cAlpha = 0; | 清零 |
if(i > 0) { | |
aRed = buffer[(col_size_recon * j) + ((i-1) * 4) + 0]; | a像素紅色 |
aGreen = buffer[(col_size_recon * j) + ((i-1) * 4) + 1]; | a像素藍色 |
aBlue = buffer[(col_size_recon * j) + ((i-1) * 4) + 2]; | a像素綠色 |
aAlpha = buffer[(col_size_recon * j) + ((i-1) * 4) + 3]; } | a像素透明 |
if(j > 0) { | |
bRed = buffer[(col_size_recon * (j-1)) + (i * 4) + 0]; | b像素紅色 |
bGreen = buffer[(col_size_recon * (j-1)) + (i * 4) + 1]; | b像素藍色 |
bBlue = buffer[(col_size_recon * (j-1)) + (i * 4) + 2]; | b像素綠色 |
bAlpha = buffer[(col_size_recon * (j-1)) + (i * 4) + 3];} | b像素透明 |
if(i > 0 && j > 0) { | |
cRed = buffer[(col_size_recon * (j-1)) + ((i-1) * 4) + 0]; | c像素紅色 |
cGreen = buffer[(col_size_recon * (j-1)) + ((i-1) * 4) + 1]; | c像素藍色 |
cBlue = buffer[(col_size_recon * (j-1)) + ((i-1) * 4) + 2]; | c像素綠色 |
cAlpha = buffer[(col_size_recon * (j-1)) + ((i-1) * 4) + 3];} | c像素透明 |
buffer[(col_size_recon * j) + (i * 4) + 0] = Red + PaethPredictor_PNG(aRed,bRed,cRed); | 復位像素紅色 |
buffer[(col_size_recon * j) + (i * 4) + 1] = Green + PaethPredictor_PNG(aGreen,bGreen,cGreen); | 復位像素藍色 |
buffer[(col_size_recon * j) + (i * 4) + 2] = Blue + PaethPredictor_PNG(aBlue,bBlue,cBlue); | 復位像素綠色 |
buffer[(col_size_recon * j) + (i * 4) + 3] = Alpha + PaethPredictor_PNG(aAlpha,bAlpha,cAlpha);}} | 復位像素透明 |
释放圖像
free(png->buffer); | 释放 |
png->buffer = buffer; | 替换復位圖像 |
png->bitCount = 32; | rgba |
png->buffer_size = buffer_size; |
『Adobe』同『Google』合作,制作『日月韓漢』矢量字庫,目前支缓65535『日月韓漢』字.以字量蒞睇依然有大量異體字未收納.
1. 官網下載『源界明朝』字庫,
2. 解壓
3. 將『SuperOTC\SourceHanSerif.ttc』复制到『C:\Windows\Fonts』
https://github.com/adobe-fonts/source-han-serif/archive/1.001R.zip |
https://typekit.com/fonts/source-han-sans-traditional-chinese |
随著『Android studio』更新版本,『Gradle』需升級.
https://services.gradle.org/distributions/gradle-8.2.1-bin.zip |
C:\Users\admin\.gradle\wrapper\dists\gradle-8.2.1-bin\5hap6b9n41hkg4jeh2au2pllh\gradle-8.2.1-bin.zip |
Connection timed out: no further information. If you are behind an HTTP proxy, please configure the proxy settings either in IDE or Gradle. |
Android studio近日彈出gradle版本晤兼容.修改工程配置. 如果唔得重裝『Android Studio』.
Android Studio版本 | Android Gradle Plugin Version插件版本 |
Hedgehog | 2023.1.1 | 3.2~8.2 |
Giraffe | 2022.3.1 | 3.2~8.1 |
Flamingo | 2022.2.1 | 3.2~8.0 |
Electric Eel | 2022.1.1 | 3.2~7.4 |
Dolphin | 2021.3.1 | 3.2~7.3 |
Android Gradle Plugin Version插件版本 | Gradle Version |
8.1 | 8.0 |
8.0 | 8.0 |
7.4 | 7.5 |
7.4 | 7.4 |
7.2 | 7.3.3 |
7.1 | 7.2 |
7.0 | 7.0 |
4.2.0+ | 6.7.1 |
The project is using an incompatible version (AGP 8.1.0) of the Android Gradle plugin. Latest supported version is AGP 8.0.0 |
换『臺達FLEX-500W火牛』後,『X99i』唔識認『TOSHIBA XG3 1TB』同『Seagate XM1440 960Gb』仲試過藍屏死機.
睇蒞都係要買翻『益衡FLEX-600W』, 貴係貴D, 勝在稳定唔死機.
『ZLIB』開源『壓縮』同『解壓』程式庫, 支持『DEFLATE』冇損壓縮算法,佢混合『LZ77算法』同『霍夫曼編碼』.
『DEFLATE』壓縮算法冇專利權.畀人大量應用係『網络』『圖檔』『文檔』『影片』.
.PNG/ Libpng | 圖檔解壓 |
.ZIP | 壓縮檔 |
.tar | 壓縮檔 |
.gz | 壓縮檔 |
HTTP | 壓縮傅送 |
FFmpeg | 影片解壓 |
下载『ZLIB』
http://www.zlib.net/ |
http://www.zlib.net/zlib-1.2.13.tar.gz |
『Android studio』內置『ZLIB』, 唔使下載.但要係『CMakeLists.txt』增添『zlib』庫.
CMakeLists.txt文檔 | |
find_library( z-lib z ) | 搜索zlib |
target_link_libraries( ${z-lib} ) | 連接zlib |
包含『ZLIB』頭文檔
#include <zlib.h> | Zlib-api |
#include <zconf.h> |
『z_stream』壓縮同解壓皆需此結构體
z_stream stream; | zlib流結构體 |
stream.zalloc = Z_NULL; | NULL用默認記憶體分配函数 |
stream.zfree = Z_NULL; | NULL用默認記憶體释放函数 |
stream.opaque = Z_NULL; | |
stream.next_in = (Bytef*)sour; | 蒞源 |
stream.avail_in = (uInt)sour_length; | 蒞源長 |
stream.next_out = dest; | 輸出 |
stream.avail_out = (uInt)*dest_length; | 輸出長 |
『ZLIB』壓縮分叁步
壓縮 | |
deflateInit(&stream, level) | 分配記憶體,level壓縮等級 |
deflate(&stream, flush); | 壓縮數據, flush設0 |
deflateEnd(&stream); | 释放記憶體 |
int deflateInit2( | deflateInit()加强版 |
z_streamp strm, | zlib流結构體 |
int level, | level壓縮等級0~9.
0:速度快,唔壓縮. 9:速度慢,壓縮率高. |
int method, | 壓縮算法僅支緩Z_DEFLATED |
int windowBits, | 處理RAW DEFLATE手法. |
int memLevel, | 指定記憶體分配MAX_MEM_LEVEL |
int strategy)); | 壓縮策略,僅影響壓縮比.默認Z_DEFAULT_STRATEGY |
level | 壓縮等級 |
#define Z_NO_COMPRESSION 0 | 唔壓縮 |
#define Z_BEST_SPEED 1 | 高速,低壓縮率 |
#define Z_BEST_COMPRESSION 9 | 高壓縮率, 慢速 |
#define Z_DEFAULT_COMPRESSION (-1) | 默認壓縮 |
windowBits | 處理RAW DEFLATE手法. |
8~15: | 純deflate壓縮 |
-8~-15: | zlib頭 + deflate + zlib尾 |
> 16: | Gzip頭+ deflate + Gzip尾 |
method | 壓縮算法 |
#define Z_DEFLATED 8 | DEFLATE冇損壓縮 |
memLevel | 記憶體分配 |
MemLevel=1 | 最小記憶體,速度慢壓縮比低 |
MemLevel=9
#define MAX_MEM_LEVEL 9 |
最大記憶體,最佳速度 |
MemLevel=8 | 默認值 |
strategy | 壓縮算法設定 |
#define Z_FILTERED 1 | 僅FILTERED生成數據 |
#define Z_HUFFMAN_ONLY 2 | 僅霍夫曼編碼 |
#define Z_RLE 3 | 匹配長度=1 |
#define Z_FIXED 4 | 禁霍夫曼編碼 |
#define Z_DEFAULT_STRATEGY 0 | 默認壓縮設定 |
『ZLIB』解壓分叁步
解壓 | |
inflateInit(&stream) | 分配記憶體 |
inflate(&stream, Z_NO_FLUSH); | 解压數據 |
inflateEnd(stream); | 释放記憶體 |
返回碼 | |
#define Z_OK 0 | |
#define Z_STREAM_END 1 | 結束 |
#define Z_NEED_DICT 2 | 愛密碼 |
#define Z_ERRNO (-1) | |
#define Z_STREAM_ERROR (-2) | |
#define Z_DATA_ERROR (-3) | 加密數據損壞壞,或缺失. |
#define Z_MEM_ERROR (-4) | 唔够記憶體 |
#define Z_BUF_ERROR (-5) | 唔够緩存 |
#define Z_VERSION_ERROR (-6) |
解壓示例
int Uncompress(PBYTE dest,int * dest_length,PBYTE sour,int sour_length)
{
z_stream stream;
int ret;
stream.zalloc = (alloc_func)0;
stream.zfree = (free_func)0;
stream.opaque = (voidpf)0;
stream.next_in = (Bytef*)sour;
stream.avail_in = (uInt)sour_length;
stream.next_out = dest;
stream.avail_out = (uInt)*dest_length;
MAX_MEM_LEVEL
ret = inflateInit2(&stream, 16+MAX_WBITS);
if (ret != Z_OK)
return ret;
ret = inflate(&stream, Z_NO_FLUSH);// 解压
*dest_length = stream.total_out;
inflateEnd(&stream);
return ret;
}
壓缩示例
bool Compress(PBYTE dest,int * dest_length,PBYTE sour,int sour_length, int level)
{
int ret, flush;
int sour_offset,dest_offset;
int have;
z_stream stream;
BYTE in[ZIP_CHUNK];
BYTE out[ZIP_CHUNK];
stream.zalloc = Z_NULL;// 内存分配函数
stream.zfree = Z_NULL;// 内存释放函数
stream.opaque = Z_NULL;
stream.next_in = (Bytef*)sour;
stream.avail_in = (uInt)sour_length;
stream.next_out = dest;
stream.avail_out = (uInt)*dest_length;
ret = deflateInit(&stream, level);// 内存分配
if (ret != Z_OK)
return false;
ret = deflate(&stream, flush); // 进行压缩
*dest_length = stream.total_out;
deflateEnd(&stream);// 释放内存
return ret;
}
『Gigabyte-X570 AORUS MASTER』成日間歇藍屏重啟.耳聞『EVGA 1000 G2』火牛質量嘛嘛,唯有試换火牛,睇中古台達『火牛GM1300』.冚模块設計.
買翻蒞壹直冇装機.
『CRC32』同『MD5』『SHA1』壹樣,計『貳进制』數值『指紋』,佢速度快,HASH校验值肆字節.两DWORD值相等比較. 适宜網络數據傳輸, 校驗數據係咪完璧.
DWORD CRC32_Table[256] = {
0x00000000, 0x77073096, 0xee0e612c, 0x990951ba,
0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec,
0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940,
0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116,
0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a,
0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818,
0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c,
0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086,
0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4,
0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe,
0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252,
0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60,
0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04,
0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a,
0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e,
0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0,
0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6,
0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d,
};
DWORD CRC32(PBYTE buf, int len){
int i;
DWORD crc;
crc = 0xffffffffL;
for (i = 0; i < len; ++i )
crc = CRC32_Table[(crc ^ buf[i]) & 0xff] ^ (crc >> 8);
crc = crc ^ 0xffffffffL;
return crc;
}
『TOSHIBA XG3 1TB』冇拉拉唔識認,後蒞『Seagate XM1440 960Gb』都唔識認.睇蒞係中古『臺達FLEX-500』造工嘛嘛.
上次買『Seagate XM1440 960Gb』係22110規格.『x99-itx』係2280規格且係主板背面.
『M.2槽2280轉22110』.卡高啱啱好利用機箱托板散热,『XM1440』維持係50℃,基本冇跌速.
『Android studio』內置架餐『Image Asset』. 畀幅圖檔佢,『Image Asset』帮你自動生成各式圖檔.
揀『Launcher Icons(Legacy only)』冚辦闌圖檔背景透明.
『Android 8.0』及以上,程式圖檔强制背景色,揀『Launcher Icons(Adaptive and Legacy)』.
Android 8.0及以上 | 圖檔背景白色 | Launcher Icons(Adaptive and Legacy) |
Android 7.1及以下 | 圖檔背景透明 | Launcher Icons(Legacy only) |
Configure Image Asset | Android 8.0(API 26) 及以上 |
Icon type | Launcher Icons(Adaptive and Legacy) |
Name | ic_launcher |
Layer name | ic_launcher_foreground |
Asset type | Image |
path | 『.png』背景透明圖檔 |
Trim | 修剪勾yes |
Resize | 100% |
Asset type | 勾Color |
Color | 0xFFFFFF |
Configure Image Asset | Android 7.1以下 |
Icon type | Launcher Icons(Legacy only) |
Name | ic_launcher |
Asset type | 勾Image |
Path | 『.png』背景透明圖檔 |
Trim | 修剪勾yes |
Padding | 0% |
Background | 背景0xFFFFFF |
Scaling | Crop/ Shrink to fit自适应宽度 |
Shape | 揀None |
Effect | 勾None |
資料夾 | Size(px) |
mipmap-xxxhdpi | 192*192 |
mipmap-xxhdpi | 144*144 |
mipmap-xhdpi | 96*96 |
mipmap-hdpi | 72*72 |
mipmap-mdpi | 48*48 |
Android Studio係右下角彈出警示,『Cannot load settings from file』冇法載入『misc.xml』,事實係文檔損毁.內容大致如下.粘貼後諸存.
『misc.xml』文檔 |
<?xml version=”1.0″ encoding=”UTF-8″?>
<project version=”4″> <component name=”ProjectRootManager” version=”2″ languageLevel=”JDK_17″ default=”true” project-jdk-name=”Android Studio default JDK” project-jdk-type=”JavaSDK”> <output url=”file://$PROJECT_DIR$/build/classes” /> </component> <component name=”ProjectType”> <option name=”id” value=”Android” /> </component> </project> |
Load settings |
Cannot load settings from file |
“D:\ANDROID\GeomanticCompass\.idea\misc.xml”;illegal character(NULL,Unicode 0) encountered: not valid in any content at[row,col{unknown-source}]:[1,2] Please correct the file content |
年號愛蒞紀年,『天皇更替』『天災人禍』之時更改年號.
飛鳥時代-年號/元號 | 儒略曆 | 天皇 |
大化 | 645年6月 | 孝德天皇 |
白雉 | 650年2月 | |
朱鳥 | 686年7月 | 天武天皇 |
大寶 | 701年3月 | 文武天皇 |
慶雲 | 704年5月 | |
和銅 | 708年正月 | 元明天皇 |
奈良時代-年號 | 儒略曆 | |
靈龜 | 715年九月 | 元正天皇 |
養老 | 717年十一月 | |
神龜 | 724年二月 | 聖武天皇 |
天平 | 729年八月 | |
天平感寶 | 749年四月 | |
天平勝寶 | 749年七月 | 孝謙天皇 |
天平寶字 | 757年八月 | |
天平神護 | 765年正月 | 稱德天皇 |
神護景雲 | 767年八月 | |
寶龜 | 770年十月 | 光仁天皇 |
天應 | 781年四月 | |
延曆 | 782年八月 | 桓武天皇 |
平安時代-年號 | 儒略曆 | 天皇 |
大同 | 806年五月 | 平城天皇 |
弘仁 | 810年九月 | 嵯峨天皇 |
天長 | 824年正月 | 淳和天皇 |
承和 | 834年正月 | 仁明天皇 |
嘉祥 | 848年六月 | |
仁壽 | 851年四月 | 文德天皇 |
齊衡 | 854年十一月 | |
天安 | 857年二月 | |
貞觀 | 859年四月 | 清和天皇 |
元慶 | 877年四月 | 陽成天皇 |
仁和 | 885年二月 | 光孝天皇 |
寬平 | 889年四月 | 宇多天皇 |
昌泰 | 898年四月 | 醍醐天皇 |
延喜 | 901年七月 | |
延長 | 923年閏四月 | |
承平 | 931年四月 | 朱雀天皇 |
天慶 | 938年五月 | |
天曆 | 947年四月 | 村上天皇 |
天德 | 957年十月 | |
應和 | 961年二月 | |
康保 | 964年七月 | |
安和 | 968年八月 | 冷泉天皇 |
天祿 | 970年三月 | 圓融天皇 |
天延 | 973年十二月 | |
貞元 | 976年七月 | |
天元 | 978年十一月 | |
永觀 | 983年四月 | |
寬和 | 985年四月 | 花山天皇 |
永延 | 987年四月 | 一條天皇 |
永祚 | 989年八月 | |
正曆 | 990年十一月 | |
長德 | 995年二月 | |
長保 | 999年正月 | |
寬弘 | 1004年七月 | |
長和 | 1012年十二月 | 三條天皇 |
寬仁 | 1017年四月 | 後一條天皇 |
治安 | 1021年二月 | |
萬壽 | 1024年七月 | |
長元 | 1028年七月 | |
長曆 | 1037年四月 | 後朱雀天皇 |
長久 | 1040年十一月 | |
寬德 | 1044年十一月 | |
永承 | 1046年四月 | 後冷泉天皇 |
天喜 | 1053年正月 | |
康平 | 1058年八月 | |
治曆 | 1065年八月 | |
延久 | 1069年四月 | 後三條天皇 |
承保 | 1074年八月 | 白河天皇 |
承曆 | 1077年十一月 | |
永保 | 1081年二月 | |
應德 | 1084年二月 | |
寬治 | 1087年四月 | 堀河天皇 |
嘉保 | 1094年十二月 | |
永長 | 1096年十二月 | |
承德 | 1097年十一月 | |
康和 | 1099年八月 | |
長治 | 1104年二月 | |
嘉承 | 1106年四月 | |
天仁 | 1108年八月 | 鳥羽天皇 |
天永 | 1110年七月 | |
永久 | 1113年七月 | |
元永 | 1118年四月 | |
保安 | 1120年四月 | |
天治 | 1124年四月 | 崇德天皇 |
大治 | 1126年正月 | |
天承 | 1131年正月 | |
長承 | 1132年八月 | |
保延 | 1135年四月 | |
永治 | 1141年七月 | |
康治 | 1142年四月 | 近衛天皇 |
天養 | 1144年二月 | |
久安 | 1145年七月 | |
仁平 | 1151年正月 | |
久壽 | 1154年十月 | |
保元 | 1156年四月 | 後白河天皇 |
平治 | 1159年四月 | 二條天皇 |
永曆 | 1160年正月 | |
應保 | 1161年九月 | |
長寬 | 1163年三月 | |
永萬 | 1165年六月 | |
仁安 | 1166年八月 | 六條天皇 |
嘉應 | 1169年四月 | 高倉天皇 |
承安 | 1171年四月 | |
安元 | 1175年七月 | |
治承 | 1177年八月 | |
養和 | 1181年七月 | 安德天皇 |
壽永 | 1182年五月 | |
元曆 | 1184年四月 | 後鳥羽天皇 |
鎌倉時代-年號 | 儒略曆 | 天皇 |
文治 | 1185年八月 | 後鳥羽天皇 |
建久 | 1190年四月 | |
正治 | 1199年四月 | 土御門天皇 |
建仁 | 1201年二月 | |
元久 | 1204年二月 | |
建永 | 1206年四月 | |
承元 | 1207年十月 | |
建曆 | 1211年三月 | 順德天皇 |
建保 | 1213年十二月 | |
承久 | 1219年四月 | |
貞應 | 1222年四月 | 後堀河天皇 |
元仁 | 1224年十一月 | |
嘉祿 | 1225年四月 | |
安貞 | 1227年十二月 | |
寬喜 | 1229年三月 | |
貞永 | 1232年四月 | |
天福 | 1233年四月 | 四條天皇 |
文曆 | 1234年十一月 | |
嘉禎 | 1235年九月 | |
曆仁 | 1238年十一月 | |
延應 | 1239年二月 | |
仁治 | 1240年七月 | |
寬元 | 1243年二月 | 後嵯峨天皇 |
寶治 | 1247年二月 | 後深草天皇 |
建長 | 1249年三月 | |
康元 | 1256年十月 | |
正嘉 | 1257年三月 | |
正元 | 1259年三月 | |
文應 | 1260年四月 | 龜山天皇 |
弘長 | 1261年二月 | |
文永 | 1264年二月 | |
建治 | 1275年四月 | 後宇多天皇 |
弘安 | 1278年二月 | |
正應 | 1288年四月 | 伏見天皇 |
永仁 | 1293年八月 | |
正安 | 1299年四月 | 後伏見天皇 |
乾元 | 1302年十一月 | 後二條天皇 |
嘉元 | 1303年八月 | |
德治 | 1306年十二月 | |
延慶 | 1308年十月 | 花園天皇 |
應長 | 1311年四月 | |
正和 | 1312年三月 | |
文保 | 1317年二月 | |
元應 | 1319年四月 | 後醍醐天皇 |
元亨 | 1321年二月 | |
正中 | 1324年十二月 | |
嘉曆 | 1326年四月 | |
元德 | 1329年八月 | |
元弘 | 1331年八月 |
室町時代-建武新政年號 | 儒略曆 | 天皇 |
建武 | 1334年正月 | 後醍醐天皇 |
室町時代-南朝年號 | 儒略曆 | 天皇 |
延元 | 1336年二月 | 後醍醐天皇 |
興國 | 1340年四月 | 後村上天皇 |
正平 | 1346年四月 | |
建德 | 1370年十二月 | 長慶天皇 |
文中 | 1372年三月 | |
天授 | 1375年五月 | |
弘和 | 1381年二月 | |
元中 | 1384年四月 | 後龜山天皇 |
室町時代-北朝年號 | 儒略曆 | 天皇 |
建武 | 1336年二月 | 光明天皇 |
曆應 | 1338年八月 | |
康永 | 1342年四月 | |
貞和 | 1345年十月 | |
觀應 | 1350年二月 | 崇光天皇 |
文和 | 1352年九月 | 後光嚴天皇 |
延文 | 1356年三月 | |
康安 | 1361年三月 | |
貞治 | 1362年九月 | |
應安 | 1368年二月 | |
永和 | 1375年二月 | 後圓融天皇 |
康曆 | 1379年三月 | |
永德 | 1381年二月 | |
至德 | 1384年二月 | 後小松天皇 |
嘉慶 | 1387年八月 | |
康應 | 1389年二月 | |
明德 | 1390年三月 |
室町時代-明德統一年號 | 儒略曆 | 天皇 |
應永 | 1394年七月 | 後小松天皇 |
正長 | 1428年四月 | 稱光天皇 |
永享 | 1429年九月 | 後花園天皇 |
嘉吉 | 1441年二月 | |
文安 | 1444年二月 | |
寶德 | 1449年七月 | |
享德 | 1452年七月 | |
康正 | 1455年七月 | |
長祿 | 1457年九月 | |
寬正 | 1460年十二月 | |
文正 | 1466年二月 | 後土御門天皇 |
應仁 | 1467年三月 | |
文明 | 1469年四月 | |
長享 | 1487年七月 | |
延德 | 1489年八月 | |
明應 | 1492年七月 | |
文龜 | 1501年二月 | 後柏原天皇 |
永正 | 1504年二月 | |
大永 | 1521年八月 | |
享祿 | 1528年八月 | 後奈良天皇 |
天文 | 1532年七月 | |
弘治 | 1555年十月 | |
永祿 | 1558年二月 | 正親町天皇 |
安土桃山時代-年號 | 儒略曆 | 天皇 |
元龜 | 1570年四月 | 正親町天皇 |
天正 | 1573年七月 | |
文祿 | 1592年十二月 | 後陽成天皇 |
慶長 | 1596年十月 |
江戶時代-年號 | 儒略曆 | 天皇 |
元和 | 1615年七月 | 後水尾天皇 |
寬永 | 1624年二月 | |
正保 | 1644年十二月 | 後光明天皇 |
慶安 | 1648年二月 | |
承應 | 1652年九月 | |
明曆 | 1655年四月 | 後西天皇 |
萬治 | 1658年七月 | |
寬文 | 1661年四月 | |
延寶 | 1673年九月 | 靈元天皇 |
天和 | 1681年九月 | |
貞享 | 1684年二月 | |
元祿 | 1688年九月 | 東山天皇 |
寶永 | 1704年三月 | |
正德 | 1711年四月 | 中御門天皇 |
享保 | 1716年六月 | |
元文 | 1736年四月 | 櫻町天皇 |
寬保 | 1741年二月 | |
延享 | 1744年二月 | |
寬延 | 1748年七月 | 桃園天皇 |
寶曆 | 1751年十月 | |
明和 | 1764年六月 | 後櫻町天皇 |
安永 | 1772年十一月 | 後桃園天皇 |
天明 | 1781年四月 | 光格天皇 |
寬政 | 1789年正月 | |
享和 | 1801年二月 | |
文化 | 1804年二月 | |
文政 | 1818年四月 | 仁孝天皇 |
天保 | 1830年十二月 | |
弘化 | 1844年十二月 | |
嘉永 | 1848年二月 | 孝明天皇 |
安政 | 1854年十一月 | |
萬延 | 1860年三月 | |
文久 | 1861年二月 | |
元治 | 1864年二月 | |
慶應 | 1865年四月 |
一世一元-年號 | 儒略曆 | 天皇 |
明治 | 1868年舊曆9月 | 明治天皇 |
大正 | 1912年7月 | 大正天皇 |
昭和 | 1926年12月 | 昭和天皇 |
平成 | 1989年1月 | 明仁天皇 |
令和 | 2019年5月 | 德仁天皇 |
禮拜行星
禮拜 | 行星 | 希臘神祇 |
禮拜日SUNDAY | 日曜日 | 太陽神 |
禮拜壹MONDAY | 月曜日 | 月光女神 |
禮拜貳TUESDAY | 火曜日 | 戰神 |
禮拜三WEDNESDAY | 水曜日 | 神使 |
禮拜肆THURSDAY | 木曜日 | 天神 |
禮拜伍FRIDAY | 金曜日 | 愛神 |
禮拜陸SATURDAY | 土曜日 | 農神 |
『月曆』即係『崇禎曆書』. 将『陰曆』同『陽曆』同步. 『崇禎曆書』 由 『湯若望』『龍華民』『羅雅谷』『鄧玉函』編纂.
10天干 | 甲乙丙丁戊己庚辛壬癸 |
12地支 | 子丑寅卯辰巳午未申酉戌亥 |
60干支 | 甲子,乙丑,丙寅,丁卯,戊辰,己巳,庚午,辛未,壬申,癸酉,
甲戌,乙亥,丙子,丁丑,戊寅,己卯,庚辰,辛巳,壬午,癸未, 甲申,乙酉,丙戌,丁亥,戊子,己丑,庚寅,辛卯,壬辰,癸巳, 甲午,乙未,丙申,丁酉,戊戌,己亥,庚子,辛丑,壬寅,癸卯, 甲辰,乙巳,丙午,丁未,戊申,己酉,庚戌,辛亥,壬子,癸丑, 甲寅,乙卯,丙辰,丁己,戊午,己未,庚申,辛酉,壬戌,癸亥 |
12地支 | 月 |
子月 | 正月 |
丑月 | 貳月 |
寅月 | 叁月 |
卯月 | 肆月 |
辰月 | 伍月 |
巳月 | 陸月 |
午月 | 柒月 |
未月 | 捌月 |
申月 | 玖月 |
酉月 | 拾月” |
戌月 | 冬月 |
亥月 | 臘月 |
12地支 | 時鐘 |
子時 | 23:00~00:59 |
丑時 | 01:00~02:59 |
寅時 | 03:00~04:59 |
卯時 | 05:00~06:59 |
辰時 | 07:00~08:59 |
巳時 | 09:00~10:59 |
午時 | 11:00~12:59 |
未時 | 13:00~14:59 |
申時 | 15:00~16:59 |
酉時 | 17:00~18:59 |
戌時 | 19:00~20:59 |
亥時 | 21:00~22:59 |
月份 | 二十四節氣 | 角度 |
1月上旬 | 小寒 | 315℃ |
1月下旬 | 大寒 | 330℃ |
2月上旬 | 立春 | 345℃ |
2月下旬 | 雨水 | 0℃ |
3月上旬 | 惊蛰 | 15℃ |
3月下旬 | 春分 | 30℃ |
4月上旬 | 清明 | 45℃ |
4月下旬 | 谷雨 | 60℃ |
5月上旬 | 立夏 | 75℃ |
5月下旬 | 小满 | 90℃ |
6月上旬 | 芒种 | 105℃ |
6月下旬 | 夏至 | 120℃ |
7月上旬 | 小暑 | 135℃ |
7月下旬 | 大暑 | 150℃ |
8月上旬 | 立秋 | 165℃ |
8月下旬 | 处暑 | 180℃ |
9月上旬 | 白露 | 195℃ |
9月下旬 | 秋分 | 210℃ |
10月上旬 | 寒露 | 225℃ |
10月下旬 | 霜降 | 240℃ |
11月上旬 | 立冬 | 255℃ |
11月下旬 | 小雪 | 270℃ |
12月上旬 | 大雪 | 285℃ |
12月下旬 | 冬至 | 300℃ |
地支 | 子 | 丑 | 寅 | 卯 | 辰 | 巳 | 午 | 未 | 申 | 酉 | 戌 | 亥 |
生肖 | 鼠 | 牛 | 虎 | 兎 | 竜 | 蛇 | 馬 | 羊 | 猿 | 雞 | 犬 | 豚 |
『儒略曆』由『羅馬』皇帝,贒明『儒略凱撒』頒發,同後蒞修正『格里曆』加入400年壹『閏』. 佢以『年』『月』『日』『時』『分』『秒』『禮拜』定義曆法.
壹年 | 2月 | |
常年 | 365日 | 28日 |
閏年 | 366日 | 29日 |
規則壹:年份係 4 倍數則係『閏年』 |
規則貳:年份係 100倍數,規則壹冇效,依然係『常年』 |
規則叁:年份係 400倍數,規則貳冇效,係『閏年』. |
月份 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
日數 | 31 | 28 | 31 | 30 | 31 | 30 | 31 | 31 | 30 | 31 | 30 | 31 |
元年正月 | 1號 | 2號 | 3號 | 4號 | 5號 | 6號 | 7號 |
禮拜 | 禮拜壹 | 禮拜貳 | 禮拜参 | 禮拜肆 | 禮拜伍 | 禮拜陸 | 禮拜日 |
臺『SAMSUNG E2220W』22寸16比10,2012年2月出厰,玩左拾幾年,咁『』玩, 點知白撞兩贊壞人,右下角出現黑斑.
諗住買『DELL U3025E』30寸16比10貴得滯.『DELL P2423』22寸16比10特價.冇內置喇叭,冇『HDMI/DisplayPort』音頻輸出口,要插DELL-USB音箱. IPS屏『画面鮮豔』比『SAMSUNG E2220W』清𥇦.
『NVIDIA Quadro K1200』得肆『DisplayPort』口. 買『miniDisplayPort轉DisplayPort線』線徑4.5mm.两頭冇磁環, 5mm卡扣磁環窿扣唔實.改為7mm卡扣磁環. 用『NVIDIA控制面板』,解析度『1920*1200』自訂頻率『75Hz』.
1. 『NVIDIA控制面板』
2. 撳『顯示』->『變更解析度』 3. 撳『自訂』 4. 撳『建立自訂解析度』 |
之前臺『Gigabyte-X570 AORUS MASTER』壹直未能投入使用, 决定啟用『x99 ITX-server』配『INTEL XEON E5-1630V4』. 『MSI GT710-1GB』連玩PHOTOSHOP都慢
『NVIDIA Quadro K1200』4GB顯存,配肆個『mini-display』, 配轉HDMI儀.用『GPU-Z』測比『RX550』慢.
『XEON E5-2630LV3』最高功耗140瓦,『QUADRO K6000』最高功耗45瓦,未計WIFI同磁盤,接近200瓦功耗.『mineNAS-ITX機箱』送『同漢250瓦火牛』,冇主板8pin線,要靠4pin轉8pin線,長期高功率輸出,火牛頂唔順.
『益衡FLEX-600瓦』太貴,買『臺達FLEX-500瓦』係其肆份壹.原配主板8pin線,同PCIE-8PIN線.
换火牛後著機唔識認『TOSHIBA XG3 1TB』同『Seagate XM1440 960Gb』,試過藍屏死機.反而『同漢250瓦火牛』係未試過藍屏死機.
自WindowsNT以蒞,Windows冇好似Win9x咁頻繁重装,但係Window11可能新出,自動更新後問題多多, 重装『Window11』 『android studio』浪費大量時間.
Windows11可備份『系統映像』,還原Windows11,好似用GHOST咁.備『磁碟機』比『C:』所用容量大.
Windows11自更新後『剪取工具』神左,『全屏』得, 『視窗』冇返應.發現可將Windows10『剪取工具』移植過蒞Windows11.
首先复制Win10『SnippingTool.exe』『SnippingTool.exe.mui』, 位置如下: 『zh-TW』係默認語言.
C:\Windows\System32\SnippingTool.exe |
C:\Windows\System32\zh-TW\SnippingTool.exe.mui |
係Win11粘貼同壹位置
C:\Windows\System32\SnippingTool.exe |
C:\Windows\System32\zh-TW\SnippingTool.exe.mui |
再釘選『工作列』『開始』
冇啦啦换『Gigabyte-X570 AORUS MASTER』换左硬碟.唔著機『DEBUG』燈『00』.壹係CPU,唔係就火牛.
拆『AVC大霜塔』連CPU掹埋出蒞.重新插反粒U著機.睇蒞係『SOCKET AM4』夹唔死粒CPU.硅脂固化後『大霜塔』自重令CPU鬆脫.
『AM4防脫定位支架』壓死粒U, 即使硅脂黐死『大霜塔』都唔會連根撥起.兼容『AVC大霜塔』.
MLC時代過去,TLC粒, 三年保養, 每日全盤寫入壹次.『SAMSUNG-990 PRO 2TB』特價,標稱謮寫均超柒千兆.驚高熱而跌速,主板自帶散熱装甲熱過辣雞.特登買風扇散熱,高温達『50℃』,實測『讀6584MB』『寫6301MB』.
SSD | 讀 | 寫 |
990 PRO 2TB | 6584 MB/S | 6301 MB/S |
買『Ryzen5-5600X』用左『RYZEN-1500X』『幽靈散熱』,超頻驚唔力够鎮唔住, 『幽靈散熱』其實畀AVC代工.
『AVC-12CM大霜塔-叁風扇』價最低,附送『AM4/x99 socket』扣.叁風扇吹同壹方向形成風道,12CM風扇容易撞爛扇葉,0.23A低電流版,降低風速風嘈.
装龬罩保護扇葉.定位固定碼調開埋,拎鬆羅𢇁調開埋.
『Ryzen5-5600X』默認頻率3.7GHz控制係38℃, 壹舉超4.6GHz控制係58℃
Ryzen5-5600X | 摄氏 |
3.7GHz | 38℃ |
4.6GHz | 58℃ |
AVC |
MODEL DS12025R12UP024 |
DC 12V – 0.23A |
HYDRAULIC BEARING |
A7224DC |
之前Win11更新後頻䌓死機,將條『TOSHIBA XG3-1TB』擺係『x99i』装Win10,時過景遷,諗過買『Micron 7450PRO-960GB』TLC SSD『讀6800MB/S』『寫5600MB/S』略貴.
睇『Seagate XM1440-960Gb』MLC MMD『讀2500MB/S』『寫900MB/S』, 實測『讀2162』『寫576』略慢,買两條組raid1沉餘陣列,叠加讀速.
『Gigabyte X570 AORUS MASTER』支持RAIDXpert2,AMD公司開發RAID技術,廿年前用两块『Western Digital-1TB』組RAID0,壹過保養即神,今次用两條XM1440組raid1因高熱而跌速,得『2280-m.2散熱』搭『2006蝸輪風扇』依然上70℃.
讀MB/S | 寫MB/S | |
RAID0 | ||
RAID1 | 1420.0 | 584.5 |
MVME | 2162.83 | 576.39 |
用RAIDXpert2組raid1分伍步,要壹氣呵成.
1. 装m.2-SSD |
2. 設置sata模式 |
3. 設置raid模式 |
4. 将win11時載入AMD RAID-9.3.0.158驅動. |
5. 重构磁盤陣列. |
装m.2-SSD
1. 斷電 |
2. 插入两條『Seagate XM1440-960Gb』 |
設置sata模式
1. 撳『DELETE鍵』登入BIOS. |
2. 撳『Settings』->『IO Ports』->『SATA Configuration』 |
3. 『SATA Mode』設為『RAID』 |
4. 『NVMe RAID Mode』設為『Enabled』 |
5. 撳『Boot』 |
6. 『CSM Support』設為『Enabled』,禁CSM兼容支持 |
7. 撳F10儲存後重啟. |
刪除RAID模式
1. 撳『Settings』->『IO Ports』->『RAIDXpert2 Configuration Utility』->『Array Management』. |
2. 撳『Delete Array』 |
3. 『Confirm』設為『Enabled』 |
4. 15秒後撳『YES』, 刪除RAID. |
設置raid模式
5. 撳『Settings』->『IO Ports』->『RAIDXpert2 Configuration Utility』->『Array Management』. |
6. 『Select RAID Level』設為『RAID 1/RAID 0』 |
7. 撳『Select Physical Disks』 |
8. 『Physical Disk 0:1:0,NVMe Gen3 x4,960.1GB, Ready』設為『Enabled』 |
9. 『Physical Disk 1:1:0,NVMe Gen3 x4,960.1GB, Ready』設為『Enabled』 |
10. 撳『Apply Changes』 |
11. 撳『Create Array』 |
12. 撳F10儲存後重啟. |
将win11時載入AMD RAID-9.3.0.158驅動.
1. 『AMD RAID-9.3.0.158』存入USB磁碟 |
2. 将win11載入驅動程式『X:\AMD RAID Preinstall Driver\Preinstall\NVMe_CC』
3. cpu冇GPU載入『NVME_CC』, 4. cpu有GPU載入『NVMe_DID』 |
5. 載入『AMD-RAID Bottom Device』 |
6. 載入『AMD-RAID Config Device』 |
7. 載入『AMD-RAID Controller[storport]』 |
8. 得翻單壹『磁碟機』,唔係刪raid1後重做. |
9. 繼續将win11 |
重构磁盤陣列.
1. raid1模式RAIDXpert2重构磁盤陣列. |
2. |
AMD RAID-9.3.0.158有两版本以CPU分NVME_DID/NVME_CC
Processor | AMD-RAID |
AMD 7th Generation A Series Desktop Processors | NVME_CC |
AMD Ryzen™ 1000 Series Desktop Processors | NVME_CC |
AMD Ryzen™ 2000 Series Desktop Processors | NVME_CC |
AMD Ryzen™ 2000 Series Desktop Processors with Radeon™ Graphics | NVME_CC |
AMD Ryzen™ 3000 Series Desktop Processors with Radeon™ Graphics | NVMe_DID |
AMD Ryzen™ 3000 Series Desktop Processors | NVME_CC |
AMD Ryzen™ 4000 Series Desktop Processors with Radeon™ Graphics | NVMe_DID |
AMD Ryzen™ 5000 Series Desktop Processors with Radeon™ Graphics | NVMe_DID |
AMD Ryzen™ 5000 Series Desktop Processors | NVME_CC |
AMD Ryzen™ 4000 Series Mobile Processors with Radeon™ Graphics | NVMe_DID |
AMD Ryzen™ 5000 Series Mobile Processors with Radeon™ Graphics | NVMe_DID |
1st Gen AMD Ryzen™ Threadripper™ Processors | NVME_CC |
2nd Gen AMD Ryzen™ Threadripper™ Processors | NVMe_DID |
3rd Gen AMD Ryzen™ Threadripper™ Processors | NVMe_DID |
上買『FILCO黑聖手』冇買黑忍者, 睇到『GHERRY-MX3.0S青軸黑忍者』有中古,
底座係鋁版折彎而成,冇倒角,冇塞窿,冇脚撑.
『Win/attr』鍵冇響應,以為神左,撳『Fn+F9』解鎖『Win/attr』.
109鍵比104鍵多左『GHERRY』『CALC』『Prev』『Play』『Next』伍鍵.
『ESC』鍵隔离多左粒『GHERRY』鍵,吾覚意撳錯鍵.
鍵 | 指南 |
GHERRY | 撳住伍秒啟CHERRY-UtilSoft |
FN+F1 | 静音 |
FN+F2 | 細聲 |
FN+F3 | 大聲 |
FN+F4 | |
FN+F5 | |
FN+F6 | |
FN+F7 | |
FN+F8 | |
FN+F9 | 激活WIN/ ATTR鍵 |
FN+F10 | IE |
FN+F11 | 等於WIN+E,啟用『檔䅁總管』 |
FN+F12 | |
Prev | 焦點,上壹首 |
Play | 焦點,play/stop |
Next | 焦點,下壹首 |
櫻桃官網 |
CHERRY UTILITY |
指南書 |
『Android studio』冇法執行『Clang-Tidy』:事因稳吾到或冇法執行『clazy-standalone』.
Unable to execute Clang-Tidy: clazy-standalone is not found or cannot be executed |
事因『Android Studio吾支持『clazy』
星座 | 大熊座Ursa Major |
形象 | 熊人 |
縮寫 | UMa |
屬格 | Ursae Majoris |
體量等級 | 3 |
面積 | 1280平方度 |
正日 | 5月16 |
聖衣 | 青銅聖衫 |
聖闘士 | |
招式 | |
起源 | 腓尼基時代 |
記錄 | 托勒密48星座之壹 |
記錄 | 88星座之壹 |
『狩獵女神』『阿蒂蜜絲』, 近身侍女『卡麗托斯』後生靚女, 畀咸濕佬『宙斯』中, 變身『阿蒂蜜絲』埋『卡麗托斯』身, 强姦至孕. 生埋蘇蝦『亞魯卡斯』.
『卡麗托斯』畀天后『希拉』落咒術,惨變黑熊. 蘇蝦『亞魯卡斯』畀仙女寧芙『凑大』.
『亞魯卡斯』長大做獵人,係樹撞到熊仁媽咪.媽咪睇見諗住上前攬住仔仔,『亞魯卡斯』睇見熊仁冲埋蒞,拉弓壹箭入魂.断氣前降頭毒解除,變翻仙女,仔乸相認.
你必須登入才能發表留言。