Re: [問題] 8bit .gif 轉 24bit .bmp 檔已回收
※ 引述《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
討論串 (同標題文章)