發表文章

目前顯示的是 8月, 2009的文章

PNG秀圖的處理

圖片
首先看看底下這張PNG格式圖檔,正確顯示結果應該如下原圖所示。 載入後以API AlphaBlend 作Per-Pixel Alpha Blend如下所示,結果是不正確。 檢查AlphaBlend規格發現,以AlphaBlend作Per-Pixel Alpha Blend時,會以底下公式計算每一個像素的值。 Dst.Red = Src.Red + (1 - Src.Alpha) * Dst.Red; Dst.Green = Src.Green + (1 - Src.Alpha) * Dst.Green; Dst.Blue = Src.Blue + (1 - Src.Alpha) * Dst.Blue; 要作正確PNG秀圖(或者說有帶Alpha Channel的圖),底下列出虛擬碼。 if (255 == Src.Alpha) { Dst.Red = Src.Red; Dst.Green = Src.Green; Dst.Blue = Src.Blue; } else if (0 != Src.Alpha) { Dst.Red = Src.Red * Src.Alpha + (1 - Src.Alpha) * Dst.Red; Dst.Green = Src.Green * Src.Alpha + (1 - Src.Alpha) * Dst.Green; Dst.Blue = Src.Blue * Src.Alpha + (1 - Src.Alpha) * Dst.Blue; } ; AlphaBlend測試代碼: BLENDFUNCTION bf; bf.BlendOp = AC_SRC_OVER; // 目前僅支援此操作. bf.BlendFlags = 0; // 必須為0 bf.SourceConstantAlpha = 255; // 使用Per-Pixel Alpha bf.AlphaFormat = AC_SRC_ALPHA; // 使用Per-Pixel Alpha dc.AlphaBlend(0, 0, sz.cx, sz.cy, memdc, 0, 0, sz.cx, sz.cy, bf);

實作組合語言除錯器

圖片
這幾天寫了個簡易版的組合語言除錯器。原因是當我在整理並重新組譯之前寫的一個組合語言小程式時,找到了一個小Bug。Debug的過程花了點時間,因為手上還沒有Debugger可用。所以就動手把之前就已計劃有需要製作的除錯器實作了一個可用的簡單版本出來,目前俱備基本的Memmory Dump, Unassemble, Breakpoints 等除錯功能。 這張圖裡面可以看到的指令好像跟x86指令集裡的有點不大一樣,暫存器看起來更不同。沒錯,因為這是我設計的虛擬機器指令集,我把它命名為 jaja XD

實驗中國象棋 for Windows Mobile Port

圖片
花了一點時間把以前作的實驗象棋植移上去,純粹當作睡前消磨時間的小玩意。這次還新增了簡單的開局資料,至少能避免每次都走出一模一樣的棋局。 PS:WM PC 模擬器在有Focus的情況下PrintScr鍵似乎無效。