全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1878
推到 Plurk!
推到 Facebook!

可以在IMAGE 上花出256色的圖表嗎?

答題得分者是:Brian77
懶懶泥
一般會員


發表:22
回覆:41
積分:12
註冊:2003-02-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-08-12 17:19:55 IP:211.76.xxx.xxx 未訂閱
各位大大,因為程式需要,所以我想再IMAGE上畫出一張256色的BITMAP圖... 各位大大可以教我如何產生嗎?? 謝謝~
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-08-12 17:31:39 IP:202.39.xxx.xxx 未訂閱
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=30132 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=20313 --- --<-<-<@
懶懶泥
一般會員


發表:22
回覆:41
積分:12
註冊:2003-02-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-08-12 17:53:48 IP:211.76.xxx.xxx 未訂閱
可是我並不是要轉顏色(TColor-->256 灰度值)... 我是想製造出傳說中的256色,然後把他存成bitmap ..... 謝謝~~ 發表人 - 懶懶泥 於 2003/08/12 18:21:40
weber
初階會員


發表:24
回覆:56
積分:26
註冊:2002-03-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-08-13 00:24:08 IP:61.217.xxx.xxx 未訂閱
用 for 迴圈及 image1.Canvas.Pixels(x,y) := RGB(r,g,b); 應該可以得到你到的結果.
懶懶泥
一般會員


發表:22
回覆:41
積分:12
註冊:2003-02-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-08-13 09:00:55 IP:140.124.xxx.xxx 未訂閱
引言: 用 for 迴圈及 image1.Canvas.Pixels(x,y) := RGB(r,g,b); 應該可以得到你到的結果.
可是這樣的結果不是24bit嗎?? 我現在是可以知道它的rgb值, 但我沒辦法根據RGB轉成轉成256種顏色(不是灰度值).... 頭痛中....請幫幫我吧!
weber
初階會員


發表:24
回覆:56
積分:26
註冊:2002-03-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-08-16 05:50:56 IP:61.217.xxx.xxx 未訂閱
R,G,B 各是多少 ? 方便 Post 上來嗎?
Brian77
中階會員


發表:8
回覆:114
積分:94
註冊:2002-05-17

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-08-16 12:30:57 IP:61.61.xxx.xxx 未訂閱
當不是全彩 (24bit) 時, 就會有所謂的色盤 256色是依據色盤來決定是全彩中的哪256色 所以在非全彩的圖檔中會儲存它的色盤 在繪圖軟體裡也會有色盤的挑選 So.. 我想, 懶懶泥想知道的是... 有沒有通用的 256 色色盤 (在256色的時代的標準Windows色盤)
Brian77
中階會員


發表:8
回覆:114
積分:94
註冊:2002-05-17

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-08-16 12:49:08 IP:61.61.xxx.xxx 未訂閱
以 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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-08-16 12:50:07 IP:61.61.xxx.xxx 未訂閱
抱歉... 漏改了~ 上述函式中的 i 應改為 index
懶懶泥
一般會員


發表:22
回覆:41
積分:12
註冊:2003-02-11

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-08-17 14:00:27 IP:140.124.xxx.xxx 未訂閱
我現在已經知道的是 256 色的 RGB ... 而我現在有一張圖是24Bit的,要將他輸出為我的256色顏色值.... 也就是輸入為24BIT的TColor值... 輸出為我所定義的256色值..... 我在向說怎麼減色...試了好久是不出來... ( 前陣子的不知道256的RGB..現在同事給我一張表單..同事自己定義的... 所以我現在只要作減色就可以了...) 謝謝大家的回應....
懶懶泥
一般會員


發表:22
回覆:41
積分:12
註冊:2003-02-11

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-08-17 14:03:09 IP:140.124.xxx.xxx 未訂閱
引言: 以 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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-08-18 11:23:12 IP:61.61.xxx.xxx 未訂閱
這個色盤的模式是 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

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-08-18 12:54:21 IP:211.76.xxx.xxx 未訂閱
感激 Brian77 大大非常詳細的解說 ..... 謝謝您!!!
系統時間:2024-05-20 7:12:12
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!