Re: [問題] 8bit .gif 轉 24bit .bmp 檔已回收

看板MATLAB作者 (幻無影)時間16年前 (2009/11/01 03:13), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《lhz135 (PPP)》之銘言: : 請問板上的先進們 : 我今天有3張8bit的gif圖片,由於我想將這3張圖片拼成一張 : 我用imread將圖片讀進來,都是灰階的圖 : 我用小畫家把圖改成24bit .bmp檔,再拼依次 : 就不會變成灰階 : 請問要如何將8bit的.gif圖,轉成24.bit的bmp檔呢 : 我已經有試過saveas還是沒用 : 謝謝 問題其實是出在 GIF 和 BMP 描述顏色的方式不同。 大略描述一下概念: 傳統的 BMP 是以紀錄每個像素點的 RGB 三原色值來代表各點顏色。 而 GIF 則是用索引色彩。 所謂的索引色彩是說,我把我這張圖要用到的色彩列成一張表, 給每個色彩一個代號,而各像素的顏色就用代號來表示。 你看到的"灰階",其實是代號值。 解決的辦法是:在讀圖的時候把那張表也讀進來再做處理。 舉個例吧! % Reference to indexed color: % http://en.wikipedia.org/wiki/Indexed_color [X, map] = imread('demo.gif', 'gif'); % Method 1 RGB = ind2rgb(X, map); imwrite(RGB, 'demo1.bmp', 'bmp'); % Method 2 imwrite(X, map, 'demo2.bmp', 'bmp'); 這段程式碼會把 demo.gif 的圖和表 (colormap) 讀進來。 接著有兩種方式,你可以用 ind2rgb 組合 X 和 map 將圖的表示法轉為 RGB。 (RGB 其實就等於是讀 demo.gif 的 BMP 版了。這時候就可以直接存為 BMP。) 也可以用 imwrite 內建的轉存方法。 按照你的描述,如果存出去還要再讀進來,建議用第一種方法,處理完之後再存。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.94.230
文章代碼(AID): #1Ax8nhPE (MATLAB)
文章代碼(AID): #1Ax8nhPE (MATLAB)