可以在IMAGE 上花出256色的圖表嗎? |
答題得分者是:Brian77
|
懶懶泥
一般會員 ![]() ![]() 發表:22 回覆:41 積分:12 註冊:2003-02-11 發送簡訊給我 |
|
hagar
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
懶懶泥
一般會員 ![]() ![]() 發表:22 回覆:41 積分:12 註冊:2003-02-11 發送簡訊給我 |
|
weber
初階會員 ![]() ![]() 發表:24 回覆:56 積分:26 註冊:2002-03-13 發送簡訊給我 |
|
懶懶泥
一般會員 ![]() ![]() 發表:22 回覆:41 積分:12 註冊:2003-02-11 發送簡訊給我 |
|
weber
初階會員 ![]() ![]() 發表:24 回覆:56 積分:26 註冊:2002-03-13 發送簡訊給我 |
|
Brian77
中階會員 ![]() ![]() ![]() 發表:8 回覆:114 積分:94 註冊:2002-05-17 發送簡訊給我 |
|
Brian77
中階會員 ![]() ![]() ![]() 發表:8 回覆:114 積分:94 註冊:2002-05-17 發送簡訊給我 |
|
Brian77
中階會員 ![]() ![]() ![]() 發表:8 回覆:114 積分:94 註冊:2002-05-17 發送簡訊給我 |
|
懶懶泥
一般會員 ![]() ![]() 發表:22 回覆:41 積分:12 註冊:2003-02-11 發送簡訊給我 |
|
懶懶泥
一般會員 ![]() ![]() 發表:22 回覆:41 積分:12 註冊:2003-02-11 發送簡訊給我 |
引言: 以 PhotoImact 的預設色盤來說. 其顏色為:// 傳入 index = 0..255, 傳回 TColor function Color256(index:byte):TColor; begin if index<216 then Result:=RGB((i div 36)*51,((i div 6) mod 6)*51,(i mod 6)*51) else Result:=$FFFFFF; end;能不能請交一下大大.. 上面的公式是代表什麼意思??? 不懂...謝謝!! |
Brian77
中階會員 ![]() ![]() ![]() 發表:8 回覆:114 積分:94 註冊:2002-05-17 發送簡訊給我 |
這個色盤的模式是 RGB 各由 256 階降為 6 階 (255/5=51, 即 0,51,102,153,204,255), RGB 三色合計 6x6x6=216 色, 剩下的 40 色全設為白色 現在你的 Source 是 24 Bit TColor, 要轉為 8 Bit 時
有幾種方式:
1. 固定色盤(固定演算法)
2. 固定色盤(查表法)
3. 最佳色盤 1. 固定色盤(演算法)
像目前舉的這個色盤的演算法, 即可產生固定的色盤
各點的TColor以相對的演算法計算出顏色索引, 或計算各點的TColor與色盤中各色的距離, 找出其索引值 2. 固定色盤(查表法)
自己為這256色定出24Bit TColor 值
計算各點的 TColor 與表中 256 個 TColor, 找出最接近的索引, 即為該點的 8 Bit 色彩值 (顯示時再以此值到色盤表中取出 24 Bit TColor 值) 3. 最佳色盤
由 Source 所有 Pixel 的 TColor 加以統計, 將它們分成 256 個群組, 每一群取出中間值(代表色), 各點改用群組編號 (8Bit) 表示
顯示時, 以群組編號取得代表色 方法1不需要儲存色盤(只要降階和還原的程式用同一對演算法)
方法2也不用儲存色盤(只要降階和還原的程式用同一色盤表)
方法3需要儲存色盤(即各群組的代表色) 那你的問題應該是在於計算色彩距離
在 RGB Domain, 可以這樣計算
// ColorTable:array[0..255] of TColor; 色盤表 function Color24to8(ColorTable:array of TColor; Color:TColor): byte; var mDest,i,mDest2,r,g,b:integer; begin mDest:=3*256; Result:=0; r:= Color and $FF; g:=(Color shr 8) and $FF; b:=(Color shr 16) and $FF; for i:=0 to 255 do begin mDest2:= abs(r-( ColorTable[i] and $FF)) abs(g-((ColorTable[i] shr 8) and $FF)) abs(b-((ColorTable[i[ shr 16) and $FF)); if mDest2 |
懶懶泥
一般會員 ![]() ![]() 發表:22 回覆:41 積分:12 註冊:2003-02-11 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |