
| 黃狗仔汪汪吠
吠亞爺蒞歸 亞爺歸蒞有乜餸 竹笋炒鷄 喫炒雞 搬去拜太公 |
www.bookcard.net

『assets讀文檔』, 如果有大量文檔,要逐壹畀文檔路徑蒞讀, 更佳係『assets』 裏邊.
將『文檔』擺係『檔案夾』. 然後遍歷『文檔』.
訪問『assets』檔案夾
|
AAssetDir * assetDir; |
開啟文檔夾, 『dir』係『assets』 裏邊
|
assetDir = AAssetManager_openDir(assetManager,dir); |
失敗返回NULL
|
if(assetDir == NULL) return false; |
遍歷文檔,
|
while((filename = AAssetDir_getNextFileName(assetDir)) != NULL) { |
組合『assets』『文檔』路徑.
|
sprintf(path, “%s/%s”, dir, filename); |
閂檔案夾
|
AAssetDir_close(assetDir); |

『萬事得3』褪車畀矮石碼, 刮花車左前門.
係填灰前需盡量修复明顯凹陷,減小填灰.
平整架餐『橋式修复』.
明顯凹陷填灰平整表層.淺刮痕跳過.
清洁
淺刮痕直接用,郡仕噴灰罐B524.
噴漆

『觸屏坐標』『x,y』坐標轉『正交投影』坐標, 『視錐體解像』寬高, 比例需手機解像寬高比壹致.
計屏幕寬高比
| float aspect_ratio = (float)cam->real_width / (float)cam->real_height; |
『視錐體解像』寬高,此時定義『高』800pix
| float frustum_width = 800 *aspect_ratio; |
| float frustum_height = 800 ; |
『正交投影』代碼
重置視區尺寸, 值係手機解像寬高
| ::glViewport(0,0,real_width,real_height); |
設定投影矩陣
| ::glMatrixMode(GL_PROJECTION); |
載入單位矩陣
| ::glLoadIdentity(); |
正交投影, 游戲坐標原點(0,0,0)為於屏幕中心
| glOrthof(frustum_width / 2, frustum_width / 2, -frustum_height / 2, frustum_height / 2, pos.y – 10, far_clip_z); |
設定模型視圖矩陣
| ::glMatrixMode(GL_MODELVIEW); |
載入單位矩陣
| ::glLoadIdentity(); |
手指触摸手機屏幕onTouch() 所得坐標需轉游戲世界坐標,正交投影OpenGL游㱆+Z軸指向屏幕深處.
| float touch3Dx = (touch2Dx / real_width) * frustum_width ; |
| float touch3Dz = (touch2Dy /real_height) * frustum_height ; |
計3D相機位置
| touch3Dx = touch3Dx + camPosX; |
| touch3Dz = touch3Dz + camPosX; |
游戲坐標原點(0,0,0)為於屏幕中心
| touch3Dx = touch3Dx – (frustum_width / 2.0f); |
| touch3Dz = touch3Dz – (frustum_height / 2.0f); |

『漢字字庫』同 『ASCII字庫』原理同, 字庫『竪排』, 漢字『32*32』pixel, 『竪』32漢字.
由上至下,由右至左排列.可填1024字符,每色8Bit. 即『索引色』『調色板』.
准備庫位圖
Photoshop轉為『索引色』
止時圖檔『調色板』共有三色『黑』『白』『透明』.
| IMAGE-SIZE | 1024*1024 |
| FONT-SIZE | 30pt |
| FONT | 衡山毛筆フォント |
| FONT-PIXEL | 32pixel*32pixel |
| 影像-模色 | 索引色 |
| 色盤 | 正確 |
| 顏色 | 3 |
| 强制 | 黑白 |
| 透明 | 勾選 |
『調色板』結构同DirextX唔同, 將flags存alpha『透明值』0~255,0係『透明』,255係『實心』
| typedef struct PALETTE_TYP {
BYTE red; BYTE green; BYTE blue; BYTE flags;//alpha } PALETTE,COLOR,* PALETTE_PTR,*COLOR_PTR; |
設置『調色板』顏色
| #define INIT_PALETTE(palette,r,g,b,a) {(palette).red=(r); (palette).green=(g); (palette).blue=(b); (palette).flags=(a);} |
黑字『調色板』設置
| index | red | green | blue | Alpha |
| 253 | 0xff | 0xff | 0xff | 0x00 |
| 255 | 0x00 | 0x00 | 0x00 | 0xFF*0.5f |
白字『調色板』設置
| index | red | green | blue | Alpha |
| 253 | 0x00 | 0x00 | 0x00 | 0x00 |
| 255 | 0xff | 0xff | 0xff | 0xFF*0.5f |
半透明,激活混合
| glEnable(GL_BLEND); |
設混合模式, 渲染時Alpha值混合.
| glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); |
激活透明测试
| glEnable(GL_ALPHA_TEST); |
Alpha=0時, 過濾背影色
| glAlphaFunc(GL_GREATER, 0); |

書法家『青柳衡山』揮毫. 登録漢字最多草書字庫. 約萬餘字,公開免費,商業領域冇制限使用.有『TrueType』『OpenType』版. 將『KouzanBrushFontSousyo.ttf』『KouzanSoushoOTF.otf』字庫複製係『C:\Windows\Fonts』
| 衡山毛筆フォント草書 (揮毫/青柳衡山) |
| https://opentype.jp/kouzansousho.htm |

『經倫羅盤』需『漢字庫』, 書法家『青柳衡山』揮亳書寫. 登録萬三漢字.公開免費,商業領域冇制限使用.有『TrueType』『OpenType』版. 將『KouzanMouhituFont.ttf』『KouzanMouhituFontOTF.otf』字庫复制係『C:\Windows\Fonts』
| 衡山毛筆フォント |
| https://opentype.jp/kouzanmouhitufont.htm |
| C:\Windows\Fonts |
| 毛筆體 |




買Google nexus5『壹為神功,貳為弟子』,『壹蒞開發,貳還心愿』.機仔細細窄邊框.當年靚絕Android, 本蒞愛『Android 4』『黑蓋』寄蒞『Android 5』『白蓋』. 韓國LG制造港版,換新電包郵百肆蚊有找.部機吾升級係用吾到, 永遠話連吾到.
| Google nexus5 | 簡介 |
| 屏 | 4.94英寸 |
| 解像 | 1920*1080 |
| 電 | 4000mAh |
| 相機 | 1310萬 |
| CPU | 驍龍800 |
| RAM | 2GB |
| DISK | 32GB |
| MODEL | LG-D821港版 |

初台Android手機己采用『單點』触摸, 直至Android2.0(SDK version 5) 先支持『多點』触摸.
| static class TounchListener implements OnTouchListener{ |
| @Override
public boolean onTouch(View v, MotionEvent event) { |
| if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ECLAIR) |
| MultiTouch(v, event); else |
| SingleTouch(v, event); |
| return false;} |
| private static TounchListener Tounch_Listener = new TounchListener() ; |
| view.setOnTouchListener(Tounch_Listener); |
| MotionEvent.getX() | X軸指右 |
| MotionEvent.getY() | Y軸指下 |
| MotionEvent.getAction() | |
| MotionEvent.ACTION_DOWN | 手指撳屏 |
| MotionEvent.ACTION_POINTER_DOWN | 手指撳屏 |
| MotionEvent.ACTION_UP | 手指鬆离 |
| MotionEvent.ACTION_POINTER_UP | 手指鬆离 |
| MotionEvent.ACTION_CANCEL | 手勢鬆 |
| MotionEvent.ACTION_MOVE | 移動手指 |
| public static int ACTION_UP = 1; | 鬆 |
| public static int ACTION_DOWN = 2; | 撳 |
| public static int ACTION_DRAGGED = 3; | 拖 |
處理『單點』触摸
| static void SingleTouch(View v, MotionEvent event){ |
| int action = event.getAction() & MotionEvent.ACTION_MASK; |
| if(action == MotionEvent.ACTION_DOWN ||
action == MotionEvent.ACTION_POINTER_DOWN) |
| Lib.setTouch(ACTION_DOWN,event.getX(),event.getY());else |
| if(action == MotionEvent.ACTION_UP ||
action == MotionEvent.ACTION_POINTER_UP || action == MotionEvent.ACTION_CANCEL) |
| Lib.setTouch(ACTION_UP,event.getX(),event.getY());else |
| if(action == MotionEvent.ACTION_MOVE) |
| Lib.setTouch(ACTION_DRAGGED,event.getX(),event.getY());} |
處理『多點』触摸
| int Pointer_Index = (event.getAction() & MotionEvent.ACTION_POINTER_ID_MASK)>>MotionEvent.ACTION_POINTER_ID_SHIFT; |
| MotionEvent.getX(index) | X軸指右 |
| MotionEvent.getY(index) | Y軸指下 |
| int action = event.getAction() & MotionEvent.ACTION_MASK; |
| int Pointer_Index = (event.getAction() & MotionEvent.ACTION_POINTER_ID_MASK)>>MotionEvent.ACTION_POINTER_ID_SHIFT; |
| int Pointer_Count = event.getPointerCount(); |
| for(int i=0; i< Pointer_Count; ++i) { |
| if (action != MotionEvent.ACTION_MOVE && i != Pointer_Index)
continue; |
| if(action == MotionEvent.ACTION_DOWN ||
action == MotionEvent.ACTION_POINTER_DOWN) |
| Lib.setTouch(ACTION_DOWN,event.getX(i),event.getY(i));else |
| if(action == MotionEvent.ACTION_UP ||
action == MotionEvent.ACTION_POINTER_UP || action == MotionEvent.ACTION_CANCEL) |
| Lib.setTouch(ACTION_UP,event.getX(i),event.getY(i));else |
| if(action == MotionEvent.ACTION_MOVE) |
| Lib.setTouch(ACTION_DRAGGED,event.getX(i),event.getY(i));} |
係C++緩存『触屏』信息Lib.setTouch();
| typedef struct TOUCH_STR{ | |
| int action; | 触屏類型 |
| int x,y; | 触屏坐標 |
| }TOUCH,*TOUCH_PTR; |
『触屏座標』轉『熒屏座標』
| void TouchToScreen(CAMERA2D_PTR cam,VECTOR2D_PTR touch){ |
| touch->x = (touch->x / (float)cam->real_width) * cam->frustum_width * cam->zoom; |
| touch->y = (1-touch->y /(float)cam->real_height) * cam->frustum_height * cam->zoom; } |

『Canon PRINT Business』運作需裝『Canon Print Service』,可直接發指今掃描影印『文檔』『圖檔』.


『Mopria Paint』係Android手機平板發影印指令. 如果『Mopria Paint』報『ERROR CODE 853』, 可嘗試『Canon Print Service』,Canon專用Android影印機程式. 同『Mopria Paint』係『外掛程式』後台臺運行, 向Canon發影印指令.
| 份數 | 1 |
| 紙張尺碼 | ISO A4 |
| 色彩 | 黑色/彩色 |
| 方向 | 縱向/橫向 |
| 雙面 | 無/長邊/短邊 |


Canon佳能MF746Cx碳粉耗盡, 原厰 CGR-055硒鼓貴, 買副鼓有『廢粉㝫』『入粉㝫』.撳左側制翻蓋,抽出硒鼓匣, 排列按『Y』『M』『C』『K』
| 硒鼓 | 顏色 |
| Y | 黃 |
| M | 洋紅 |
| C | 靑 |
| K | 黑 |
係電腦睇『墨粉余量狀態』皆100%,提示非原厰厰硒. 影印OK.
2025-11-27購入, 至2025-12-30首次换『碳粉』.

全屏令人沉浸游戲免受干擾. 收埋頂『狀態』『標題』底『導航』.
| requestWindowFeature(Window.FEATURE_NO_TITLE); |
| Window window = getWindow(); |
| window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); |
| setContentView(R.layout.activity_main); |
| <style name=”Theme.Fullscreen” parent=”android:Theme.NoTitleBar.Fullscreen” /> |
| <application android:theme=”@style/Theme.Fullscreen” > |
| if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) |
| View decorView = window.getDecorView(); |
| decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY |
View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN); |
| setSystemUiVisibility() | 簡述 |
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | 飛底『導航』 |
| View.SYSTEM_UI_FLAG_FULLSCREEN | 飛頂『狀態』 |
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | 自動恢復『沉㓎模式』 |
| View.SYSTEM_UI_FLAG_IMMERSIVE | 『沉㓎模式』 |
| if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { |
| WindowManager.LayoutParams param = window.getAttributes(); |
| param.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; |
| window.setAttributes(param);} |
| layoutInDisplayCutoutMode | 簡述 |
| LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT | 全屏唔延伸至『兔唇 』, 非全屏延伸至『兔唇 』 |
| LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER | WINDOW唔延伸至『兔唇 』 |
| LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES | 窻口延伸至『兔唇 』 |
Android 螢幕耗電, 擺低手機螢幕變暗,幷鎖定. 好似你唔惏野會放蚊咁.用『喚醒鎖』WakLock. 保持清醒『螢幕喚醒』.
| <uses-permission android:name=”android.permission.WAKE_LOCK” /> |
| PowerManager powerManager; |
| powerManager = (PowerManager)context.getSystemService(Context.POWER_SERVICE); |
| PowerManager.WakeLock wakeLock; |
| wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, “WAKE LOCK”); |
| wakeLock.acquire(); |
| wakeLock.release(); |
| getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); |