herrDeng網內搜尋
自訂搜尋
Ads
2016年11月25日 星期五
Ex9 處理BMP圖檔的C++程式(未用任何library)
要處理的511x511未壓縮tiffany bmp圖檔,
作業為產生R、G、B、半灰半彩的圖檔
0)class ImageMarix:
1)使用windows.h中的
struct BITMAPFILEHEADER
2)使用windows.h中的
struct BITMAPINFOHEADER
3)class ImageMarix 中的變數成員與建構子,注意rowsize必須是4的倍數,一個pixel有3 bytes RGB的顏色,不足4的倍數,往上padding。
4)透過seekg移動游標至檔尾,透過tellg來告知圖檔實際大小,透個read來讀取表頭、圖檔資料表圖、像素資料。像素的排列順序是GBR,先由左而右、再下而上,與座標再下而上,與座標不同,也與矩陣排列不同。
5)透個write來寫表頭、圖檔資料表圖、像素資料
6)簡易的轉灰階函數convert2gray,像素的排列順序是GBR,公式為
gray=(BYTE)(0.2989*R + 0.5870*G + 0.1140*B+0.5)
更一般的版本。自訂windows常用的BITMAPFILEHEADER、BITMAPINFOHEADER,
可在windows、linux上執行。要加上前置處理器,對齊struct, class中成員,如
#pragma pack(push)
#pragma pack(2)
....
#pragma pack(pop)
訂閱:
張貼留言 (Atom)
熱門文章
-
教育部為提昇全民資安素養與電腦防護能力,本部於101年9月5日至11月5日舉辦「全民資安素養自我評量」活動,請在活動期間內踴躍上網檢測資訊安全素養認知程度,並有機會參與抽獎,詳情請參閱活動網站(網址: https://isafe.moe.edu.tw/event
-
url="https://www.twse.com.tw/exchangeReport/STOCK_DAY?response=json&date=20220330&stockNo=2330"
-
XOR prefixsum CPP python解Leetcode 1829 Maximum XOR for Each Query 其實這裡考慮的是元素個數為2^maximumBit的交換群,運算子為XOR。 [Python code請進]
-
你會用C的算子sizeof?
-
Python C++使用字串find迴圈速解Leetcode 2490 Circular Sentence C++ & Python都有字串的find,用法都類似 split=s.find(' ', split+1)能找到s從index=split+1開...
-
先說明一下這是後知後覺的解答,所謂後知就是股票價格已知存在陣列(清單),當然就要用迴圈練習,雙迴圈暴力解需時O(n**2),當然不用,採python單一迴圈解答「最佳股票的買賣時機#LeetCode 121 Best Time to Buy and Sell Stock」,解...
-
Colab上安裝中文字型修改股市爬蟲pyplot顯圖 使用python套件: numpy, requests. pyplot, matplotlib.font_manager, matplotlib.mpl
-
2 pointer Python C++解Leetcode 3163 String Compression III [codes on Leetcode] https://leetcode.com/problems/string-compression-iii/solution...
18 則留言:
ImageMatrix convert2g(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
BYTE gray = (BYTE)(0.2989*R + 0.5870*G + 0.1140*B + 0.5);
mm.term[y*m.rowsize + x] = 0;
mm.term[y*m.rowsize + x + 1] = G;
mm.term[y*m.rowsize + x + 2] = 0;
}
return mm;
}
ImageMatrix convert2b(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
BYTE gray = (BYTE)(0.2989*R + 0.5870*G + 0.1140*B + 0.5);
mm.term[y*m.rowsize + x] = B;
mm.term[y*m.rowsize + x + 1] = 0;
mm.term[y*m.rowsize + x + 2] = 0;
}
return mm;
}
ImageMatrix convert2r(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
BYTE gray = (BYTE)(0.2989*R + 0.5870*G + 0.1140*B + 0.5);
mm.term[y*m.rowsize + x] = 0;
mm.term[y*m.rowsize + x + 1] = 0;
mm.term[y*m.rowsize + x + 2] = R;
}
return mm;
}
ImageMatrix convert2gray(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
BYTE gray = (BYTE)(0.2989*R + 0.5870*G + 0.1140*B + 0.5);
if (y<m.height/2)
mm.term[y*m.rowsize + x] = mm.term[y*m.rowsize + x + 1] =
mm.term[y*m.rowsize + x + 2] = gray;
else{mm.term[y*m.rowsize + x] = B;
mm.term[y*m.rowsize + x + 1] = G;
mm.term[y*m.rowsize + x + 2] = R; }
}
return mm;
}
ImageMatrix convert2g(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
BYTE gray = (BYTE)(0.2989*R + 0.5870*G + 0.1140*B + 0.5);
mm.term[y*m.rowsize + x] = 0;
mm.term[y*m.rowsize + x + 1] = G;
mm.term[y*m.rowsize + x + 2] = 0;
}
return mm;
}
ImageMatrix convert2b(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
BYTE gray = (BYTE)(0.2989*R + 0.5870*G + 0.1140*B + 0.5);
mm.term[y*m.rowsize + x] = B;
mm.term[y*m.rowsize + x + 1] = 0;
mm.term[y*m.rowsize + x + 2] = 0;
}
return mm;
}
ImageMatrix convert2r(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
BYTE gray = (BYTE)(0.2989*R + 0.5870*G + 0.1140*B + 0.5);
mm.term[y*m.rowsize + x] = 0;
mm.term[y*m.rowsize + x + 1] = 0;
mm.term[y*m.rowsize + x + 2] = R;
}
return mm;
}
ImageMatrix convert2gray(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
BYTE gray = (BYTE)(0.2989*R + 0.5870*G + 0.1140*B + 0.5);
if (y<m.height/2)
mm.term[y*m.rowsize + x] = mm.term[y*m.rowsize + x + 1] =
mm.term[y*m.rowsize + x + 2] = gray;
else{mm.term[y*m.rowsize + x] = B;
mm.term[y*m.rowsize + x + 1] = G;
mm.term[y*m.rowsize + x + 2] = R; }
}
return mm;
}
ImageMatrix convert2g(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
BYTE gray = (BYTE)(0.2989*R + 0.5870*G + 0.1140*B + 0.5);
mm.term[y*m.rowsize + x] = 0;
mm.term[y*m.rowsize + x + 1] = G;
mm.term[y*m.rowsize + x + 2] = 0;
}
return mm;
}
ImageMatrix convert2b(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
BYTE gray = (BYTE)(0.2989*R + 0.5870*G + 0.1140*B + 0.5);
mm.term[y*m.rowsize + x] = B;
mm.term[y*m.rowsize + x + 1] = 0;
mm.term[y*m.rowsize + x + 2] = 0;
}
return mm;
}
ImageMatrix convert2r(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
BYTE gray = (BYTE)(0.2989*R + 0.5870*G + 0.1140*B + 0.5);
mm.term[y*m.rowsize + x] = 0;
mm.term[y*m.rowsize + x + 1] = 0;
mm.term[y*m.rowsize + x + 2] = R;
}
return mm;
}
ImageMatrix convert2gray(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
BYTE gray = (BYTE)(0.2989*R + 0.5870*G + 0.1140*B + 0.5);
if (y<m.height/2)
mm.term[y*m.rowsize + x] = mm.term[y*m.rowsize + x + 1] =
mm.term[y*m.rowsize + x + 2] = gray;
else{mm.term[y*m.rowsize + x] = B;
mm.term[y*m.rowsize + x + 1] = G;
mm.term[y*m.rowsize + x + 2] = R; }
}
return mm;
}
ImageMatrix convert2green(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y < m.height; y++)
for (int x = 0; x < m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
mm.term[y*m.rowsize + x] = 0;
mm.term[y*m.rowsize + x + 1] = G;
mm.term[y*m.rowsize + x + 2] = 0;
}
return mm;
}
ImageMatrix convert2red(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
mm.term[y*m.rowsize + x] = 0;
mm.term[y*m.rowsize + x + 1] = 0;
mm.term[y*m.rowsize + x + 2] = R;
}
return mm;
}
ImageMatrix convert2blue(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
mm.term[y*m.rowsize + x] = B;
mm.term[y*m.rowsize + x + 1] = 0;
mm.term[y*m.rowsize + x + 2] = 0;
}
return mm;
}
ImageMatrix convert2convertAndgray(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
BYTE gray = (BYTE)(0.2989*R + 0.5870*G + 0.1140*B + 0.5);
if (y<m.height/2)
mm.term[y*m.rowsize + x] = mm.term[y*m.rowsize + x + 1] =
mm.term[y*m.rowsize + x + 2] = gray;
else{
mm.term[y*m.rowsize + x] = B;
mm.term[y*m.rowsize + x + 1] = G;
mm.term[y*m.rowsize + x + 2] = R;
}
}
return mm;
}
ImageMatrix convert2gg(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
mm.term[y*m.rowsize + x] = 0;
mm.term[y*m.rowsize + x + 1] = G;
mm.term[y*m.rowsize + x + 2] = 0;
}
return mm;
}
ImageMatrix convert2bb(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
mm.term[y*m.rowsize + x] = B;
mm.term[y*m.rowsize + x + 1] = 0;
mm.term[y*m.rowsize + x + 2] = 0;
}
return mm;
}
ImageMatrix convert2rr(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
mm.term[y*m.rowsize + x] = 0;
mm.term[y*m.rowsize + x + 1] = 0;
mm.term[y*m.rowsize + x + 2] = R;
}
return mm;
}
ImageMatrix convert2cc(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x < m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
BYTE gray = (BYTE)(0.2989*R + 0.5870*G + 0.1140*B + 0.5);
if (y < m.height / 2)
mm.term[y*m.rowsize + x] = mm.term[y*m.rowsize + x + 1]
= mm.term[y*m.rowsize + x + 2] = gray;
else{
mm.term[y*m.rowsize + x] = B;
mm.term[y*m.rowsize + x + 1] = G;
mm.term[y*m.rowsize + x + 2] = R;
}
}
return mm;
}
int main(){
cout<<sizeof(BITMAPFILEHEADER)<<endl;
cout<<sizeof(BITMAPINFOHEADER)<<endl;
ImageMatrix m, mm;
m.Load("tiffany511.bmp");
m.Save("tiffany511(copy).bmp");
mm=convert2gray(m);
mm.Save("tiffany2.bmp");
mm = convert2gg(m);
mm.Save("tiffanyG.bmp");
mm = convert2rr(m);
mm.Save("tiffanyR.bmp");
mm = convert2bb(m);
mm.Save("tiffanyB.bmp");
mm = convert2cc(m);
mm.Save("tiffanyC.bmp");
system("Pause");
return 0;
}
ImageMatrix convert2gray(ImageMatrix m){
ImageMatrix mm=ImageMatrix(m.height, m.width);
for(int y=0; y<m.height; y++)
for(int x=0; x<m.rowsize; x+=3){
BYTE B=m.term[y*m.rowsize+x];
BYTE G=m.term[y*m.rowsize+x+1];
BYTE R=m.term[y*m.rowsize+x+2];
BYTE gray=(BYTE)(0.2989*R + 0.5870*G + 0.1140*B+0.5);
mm.term[y*m.rowsize+x]=
mm.term[y*m.rowsize+x+1]=
mm.term[y*m.rowsize+x+2]=gray;
}
return mm;
}
ImageMatrix convert2green(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
mm.term[y*m.rowsize + x] = 0;
mm.term[y*m.rowsize + x + 1] = G;
mm.term[y*m.rowsize + x + 2] = 0;
}
return mm;
}
ImageMatrix convert2blue(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
mm.term[y*m.rowsize + x] = B;
mm.term[y*m.rowsize + x + 1] = 0;
mm.term[y*m.rowsize + x + 2] = 0;
}
return mm;
}
ImageMatrix convert2red(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
mm.term[y*m.rowsize + x] = 0;
mm.term[y*m.rowsize + x + 1] = 0;
mm.term[y*m.rowsize + x + 2] = R;
}
return mm;
}
ImageMatrix convert2green(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y < m.height; y++)
for (int x = 0; x < m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x + 0];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
mm.term[y*m.rowsize + x + 0] = mm.term[y*m.rowsize + x + 2] = 0;
mm.term[y*m.rowsize + x + 1] = G;
}
return mm;
}
ImageMatrix convert2red(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y < m.height; y++)
for (int x = 0; x < m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x + 0];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
mm.term[y*m.rowsize + x + 0] = mm.term[y*m.rowsize + x + 1] = 0;
mm.term[y*m.rowsize + x + 2] = G;
}
return mm;
}
ImageMatrix convert2blue(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y < m.height; y++)
for (int x = 0; x < m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x + 0];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
mm.term[y*m.rowsize + x + 1] = mm.term[y*m.rowsize + x + 2] = 0;
mm.term[y*m.rowsize + x + 0] = G;
}
return mm;
}
ImageMatrix convert2half(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
BYTE gray = (BYTE)(0.2989*R + 0.5870*G + 0.1140*B + 0.5);
if (y<m.height / 2)
mm.term[y*m.rowsize + x] = mm.term[y*m.rowsize + x + 1] =
mm.term[y*m.rowsize + x + 2] = gray;
else{
mm.term[y*m.rowsize + x + 0] = B;
mm.term[y*m.rowsize + x + 1] = G;
mm.term[y*m.rowsize + x + 2] = R;
}
}
return mm;
}
ImageMatrix convert2green(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y < m.height; y++)
for (int x = 0; x < m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x + 0];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
mm.term[y*m.rowsize + x + 0] = mm.term[y*m.rowsize + x + 2] = 0;
mm.term[y*m.rowsize + x + 1] = G;
}
return mm;
}
ImageMatrix convert2red(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y < m.height; y++)
for (int x = 0; x < m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x + 0];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
mm.term[y*m.rowsize + x + 0] = mm.term[y*m.rowsize + x + 1] = 0;
mm.term[y*m.rowsize + x + 2] = G;
}
return mm;
}
ImageMatrix convert2blue(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y < m.height; y++)
for (int x = 0; x < m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x + 0];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
mm.term[y*m.rowsize + x + 1] = mm.term[y*m.rowsize + x + 2] = 0;
mm.term[y*m.rowsize + x + 0] = G;
}
return mm;
}
ImageMatrix convert2half(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
BYTE gray = (BYTE)(0.2989*R + 0.5870*G + 0.1140*B + 0.5);
if (y<m.height / 2)
mm.term[y*m.rowsize + x] = mm.term[y*m.rowsize + x + 1] =
mm.term[y*m.rowsize + x + 2] = gray;
else{
mm.term[y*m.rowsize + x + 0] = B;
mm.term[y*m.rowsize + x + 1] = G;
mm.term[y*m.rowsize + x + 2] = R;
}
}
return mm;
}
ImageMatrix convert2green(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y < m.height; y++)
for (int x = 0; x < m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x + 0];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
mm.term[y*m.rowsize + x + 0] = mm.term[y*m.rowsize + x + 2] = 0;
mm.term[y*m.rowsize + x + 1] = G;
}
return mm;
}
ImageMatrix convert2red(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y < m.height; y++)
for (int x = 0; x < m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x + 0];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
mm.term[y*m.rowsize + x + 0] = mm.term[y*m.rowsize + x + 1] = 0;
mm.term[y*m.rowsize + x + 2] = G;
}
return mm;
}
ImageMatrix convert2blue(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y < m.height; y++)
for (int x = 0; x < m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x + 0];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
mm.term[y*m.rowsize + x + 1] = mm.term[y*m.rowsize + x + 2] = 0;
mm.term[y*m.rowsize + x + 0] = G;
}
return mm;
}
ImageMatrix convert2half(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
BYTE gray = (BYTE)(0.2989*R + 0.5870*G + 0.1140*B + 0.5);
if (y<m.height / 2)
mm.term[y*m.rowsize + x] = mm.term[y*m.rowsize + x + 1] =
mm.term[y*m.rowsize + x + 2] = gray;
else{
mm.term[y*m.rowsize + x + 0] = B;
mm.term[y*m.rowsize + x + 1] = G;
mm.term[y*m.rowsize + x + 2] = R;
}
}
return mm;
}
ImageMatrix convert2green(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y < m.height; y++)
for (int x = 0; x < m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x + 0];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
mm.term[y*m.rowsize + x + 0] = mm.term[y*m.rowsize + x + 2] = 0;
mm.term[y*m.rowsize + x + 1] = G;
}
return mm;
}
ImageMatrix convert2red(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y < m.height; y++)
for (int x = 0; x < m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x + 0];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
mm.term[y*m.rowsize + x + 0] = mm.term[y*m.rowsize + x + 1] = 0;
mm.term[y*m.rowsize + x + 2] = G;
}
return mm;
}
ImageMatrix convert2blue(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y < m.height; y++)
for (int x = 0; x < m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x + 0];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
mm.term[y*m.rowsize + x + 1] = mm.term[y*m.rowsize + x + 2] = 0;
mm.term[y*m.rowsize + x + 0] = G;
}
return mm;
}
ImageMatrix convert2half(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
BYTE gray = (BYTE)(0.2989*R + 0.5870*G + 0.1140*B + 0.5);
if (y<m.height / 2)
mm.term[y*m.rowsize + x] = mm.term[y*m.rowsize + x + 1] =
mm.term[y*m.rowsize + x + 2] = gray;
else{
mm.term[y*m.rowsize + x + 0] = B;
mm.term[y*m.rowsize + x + 1] = G;
mm.term[y*m.rowsize + x + 2] = R;
}
}
return mm;
}
ImageMatrix convert2green(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y < m.height; y++)
for (int x = 0; x < m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x + 0];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
mm.term[y*m.rowsize + x + 0] = mm.term[y*m.rowsize + x + 2] = 0;
mm.term[y*m.rowsize + x + 1] = G;
}
return mm;
}
ImageMatrix convert2red(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y < m.height; y++)
for (int x = 0; x < m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x + 0];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
mm.term[y*m.rowsize + x + 0] = mm.term[y*m.rowsize + x + 1] = 0;
mm.term[y*m.rowsize + x + 2] = G;
}
return mm;
}
ImageMatrix convert2blue(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y < m.height; y++)
for (int x = 0; x < m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x + 0];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
mm.term[y*m.rowsize + x + 1] = mm.term[y*m.rowsize + x + 2] = 0;
mm.term[y*m.rowsize + x + 0] = G;
}
return mm;
}
ImageMatrix convert2half(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
BYTE gray = (BYTE)(0.2989*R + 0.5870*G + 0.1140*B + 0.5);
if (y<m.height / 2)
mm.term[y*m.rowsize + x] = mm.term[y*m.rowsize + x + 1] =
mm.term[y*m.rowsize + x + 2] = gray;
else{
mm.term[y*m.rowsize + x + 0] = B;
mm.term[y*m.rowsize + x + 1] = G;
mm.term[y*m.rowsize + x + 2] = R;
}
}
return mm;
}
ImageMatrix convert2gg(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
mm.term[y*m.rowsize + x] = 0;
mm.term[y*m.rowsize + x + 1] = G;
mm.term[y*m.rowsize + x + 2] = 0;
}
return mm;
}
ImageMatrix convert2bb(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
mm.term[y*m.rowsize + x] = B;
mm.term[y*m.rowsize + x + 1] = 0;
mm.term[y*m.rowsize + x + 2] = 0;
}
return mm;
}
ImageMatrix convert2rr(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
mm.term[y*m.rowsize + x] = 0;
mm.term[y*m.rowsize + x + 1] = 0;
mm.term[y*m.rowsize + x + 2] = R;
}
return mm;
}
ImageMatrix convert2cc(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x < m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
BYTE gray = (BYTE)(0.2989*R + 0.5870*G + 0.1140*B + 0.5);
if (y < m.height / 2)
mm.term[y*m.rowsize + x] = mm.term[y*m.rowsize + x + 1]
= mm.term[y*m.rowsize + x + 2] = gray;
else{
mm.term[y*m.rowsize + x] = B;
mm.term[y*m.rowsize + x + 1] = G;
mm.term[y*m.rowsize + x + 2] = R;
}
}
return mm;
}
int main(){
cout<<sizeof(BITMAPFILEHEADER)<<endl;
cout<<sizeof(BITMAPINFOHEADER)<<endl;
ImageMatrix m, mm;
m.Load("tiffany511.bmp");
m.Save("tiffany511(copy).bmp");
mm=convert2gray(m);
mm.Save("tiffany2.bmp");
mm = convert2gg(m);
mm.Save("tiffanyG.bmp");
mm = convert2rr(m);
mm.Save("tiffanyR.bmp");
mm = convert2bb(m);
mm.Save("tiffanyB.bmp");
mm = convert2cc(m);
mm.Save("tiffanyC.bmp");
system("Pause");
return 0;
}
ImageMatrix convert2green(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y < m.height; y++)
for (int x = 0; x < m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
mm.term[y*m.rowsize + x] = 0;
mm.term[y*m.rowsize + x + 1] = G;
mm.term[y*m.rowsize + x + 2] = 0;
}
return mm;
}
ImageMatrix convert2red(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
mm.term[y*m.rowsize + x] = 0;
mm.term[y*m.rowsize + x + 1] = 0;
mm.term[y*m.rowsize + x + 2] = R;
}
return mm;
}
ImageMatrix convert2blue(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
mm.term[y*m.rowsize + x] = B;
mm.term[y*m.rowsize + x + 1] = 0;
mm.term[y*m.rowsize + x + 2] = 0;
}
return mm;
}
ImageMatrix convert2convertAndgray(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
BYTE gray = (BYTE)(0.2989*R + 0.5870*G + 0.1140*B + 0.5);
if (y<m.height/2)
mm.term[y*m.rowsize + x] = mm.term[y*m.rowsize + x + 1] =
mm.term[y*m.rowsize + x + 2] = gray;
else{
mm.term[y*m.rowsize + x] = B;
mm.term[y*m.rowsize + x + 1] = G;
mm.term[y*m.rowsize + x + 2] = R;
}
}
return mm;
}
ImageMatrix convert2gray(ImageMatrix m){
ImageMatrix mm=ImageMatrix(m.height, m.width);
for(int y=0; y<m.height; y++)
for(int x=0; x<m.rowsize; x+=3){
BYTE B=m.term[y*m.rowsize+x];
BYTE G=m.term[y*m.rowsize+x+1];
BYTE R=m.term[y*m.rowsize+x+2];
BYTE gray=(BYTE)(0.2989*R + 0.5870*G + 0.1140*B+0.5);
mm.term[y*m.rowsize+x]=
mm.term[y*m.rowsize+x+1]=
mm.term[y*m.rowsize+x+2]=gray;
}
return mm;
}
ImageMatrix convert2green(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
mm.term[y*m.rowsize + x] = 0;
mm.term[y*m.rowsize + x + 1] = G;
mm.term[y*m.rowsize + x + 2] = 0;
}
return mm;
}
ImageMatrix convert2blue(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
mm.term[y*m.rowsize + x] = B;
mm.term[y*m.rowsize + x + 1] = 0;
mm.term[y*m.rowsize + x + 2] = 0;
}
return mm;
}
ImageMatrix convert2red(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
mm.term[y*m.rowsize + x] = 0;
mm.term[y*m.rowsize + x + 1] = 0;
mm.term[y*m.rowsize + x + 2] = R;
}
return mm;
}
ImageMatrix convert2g(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
BYTE gray = (BYTE)(0.2989*R + 0.5870*G + 0.1140*B + 0.5);
mm.term[y*m.rowsize + x] = 0;
mm.term[y*m.rowsize + x + 1] = G;
mm.term[y*m.rowsize + x + 2] = 0;
}
return mm;
}
ImageMatrix convert2b(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
BYTE gray = (BYTE)(0.2989*R + 0.5870*G + 0.1140*B + 0.5);
mm.term[y*m.rowsize + x] = B;
mm.term[y*m.rowsize + x + 1] = 0;
mm.term[y*m.rowsize + x + 2] = 0;
}
return mm;
}
ImageMatrix convert2r(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
BYTE gray = (BYTE)(0.2989*R + 0.5870*G + 0.1140*B + 0.5);
mm.term[y*m.rowsize + x] = 0;
mm.term[y*m.rowsize + x + 1] = 0;
mm.term[y*m.rowsize + x + 2] = R;
}
return mm;
}
ImageMatrix convert2gray(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
BYTE gray = (BYTE)(0.2989*R + 0.5870*G + 0.1140*B + 0.5);
if (y<m.height/2)
mm.term[y*m.rowsize + x] = mm.term[y*m.rowsize + x + 1] =
mm.term[y*m.rowsize + x + 2] = gray;
else{mm.term[y*m.rowsize + x] = B;
mm.term[y*m.rowsize + x + 1] = G;
mm.term[y*m.rowsize + x + 2] = R; }
}
return mm;
}
ImageMatrix convert2gg(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
mm.term[y*m.rowsize + x] = 0;
mm.term[y*m.rowsize + x + 1] = G;
mm.term[y*m.rowsize + x + 2] = 0;
}
return mm;
}
ImageMatrix convert2bb(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
mm.term[y*m.rowsize + x] = B;
mm.term[y*m.rowsize + x + 1] = 0;
mm.term[y*m.rowsize + x + 2] = 0;
}
return mm;
}
ImageMatrix convert2rr(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
mm.term[y*m.rowsize + x] = 0;
mm.term[y*m.rowsize + x + 1] = 0;
mm.term[y*m.rowsize + x + 2] = R;
}
return mm;
}
ImageMatrix convert2cc(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x < m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
BYTE gray = (BYTE)(0.2989*R + 0.5870*G + 0.1140*B + 0.5);
if (y < m.height / 2)
mm.term[y*m.rowsize + x] = mm.term[y*m.rowsize + x + 1]
= mm.term[y*m.rowsize + x + 2] = gray;
else{
mm.term[y*m.rowsize + x] = B;
mm.term[y*m.rowsize + x + 1] = G;
mm.term[y*m.rowsize + x + 2] = R;
}
}
return mm;
}
int main(){
cout<<sizeof(BITMAPFILEHEADER)<<endl;
cout<<sizeof(BITMAPINFOHEADER)<<endl;
ImageMatrix m, mm;
m.Load("tiffany511.bmp");
m.Save("tiffany511(copy).bmp");
mm=convert2gray(m);
mm.Save("tiffany2.bmp");
mm = convert2gg(m);
mm.Save("tiffanyG.bmp");
mm = convert2rr(m);
mm.Save("tiffanyR.bmp");
mm = convert2bb(m);
mm.Save("tiffanyB.bmp");
mm = convert2cc(m);
mm.Save("tiffanyC.bmp");
system("Pause");
return 0;
}
ImageMatrix convert2g(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
BYTE gray = (BYTE)(0.2989*R + 0.5870*G + 0.1140*B + 0.5);
mm.term[y*m.rowsize + x] = 0;
mm.term[y*m.rowsize + x + 1] = G;
mm.term[y*m.rowsize + x + 2] = 0;
}
return mm;
}
ImageMatrix convert2b(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
BYTE gray = (BYTE)(0.2989*R + 0.5870*G + 0.1140*B + 0.5);
mm.term[y*m.rowsize + x] = B;
mm.term[y*m.rowsize + x + 1] = 0;
mm.term[y*m.rowsize + x + 2] = 0;
}
return mm;
}
ImageMatrix convert2r(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
BYTE gray = (BYTE)(0.2989*R + 0.5870*G + 0.1140*B + 0.5);
mm.term[y*m.rowsize + x] = 0;
mm.term[y*m.rowsize + x + 1] = 0;
mm.term[y*m.rowsize + x + 2] = R;
}
return mm;
}
ImageMatrix convert2gray(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
BYTE gray = (BYTE)(0.2989*R + 0.5870*G + 0.1140*B + 0.5);
if (y<m.height/2)
mm.term[y*m.rowsize + x] = mm.term[y*m.rowsize + x + 1] =
mm.term[y*m.rowsize + x + 2] = gray;
else{mm.term[y*m.rowsize + x] = B;
mm.term[y*m.rowsize + x + 1] = G;
mm.term[y*m.rowsize + x + 2] = R; }
}
return mm;
}
ImageMatrix convert2g(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
BYTE gray = (BYTE)(0.2989*R + 0.5870*G + 0.1140*B + 0.5);
mm.term[y*m.rowsize + x] = 0;
mm.term[y*m.rowsize + x + 1] = G;
mm.term[y*m.rowsize + x + 2] = 0;
}
return mm;
}
ImageMatrix convert2b(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
BYTE gray = (BYTE)(0.2989*R + 0.5870*G + 0.1140*B + 0.5);
mm.term[y*m.rowsize + x] = B;
mm.term[y*m.rowsize + x + 1] = 0;
mm.term[y*m.rowsize + x + 2] = 0;
}
return mm;
}
ImageMatrix convert2r(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
BYTE gray = (BYTE)(0.2989*R + 0.5870*G + 0.1140*B + 0.5);
mm.term[y*m.rowsize + x] = 0;
mm.term[y*m.rowsize + x + 1] = 0;
mm.term[y*m.rowsize + x + 2] = R;
}
return mm;
}
ImageMatrix convert2gray(ImageMatrix m){
ImageMatrix mm = ImageMatrix(m.height, m.width);
for (int y = 0; y<m.height; y++)
for (int x = 0; x<m.rowsize; x += 3){
BYTE B = m.term[y*m.rowsize + x];
BYTE G = m.term[y*m.rowsize + x + 1];
BYTE R = m.term[y*m.rowsize + x + 2];
BYTE gray = (BYTE)(0.2989*R + 0.5870*G + 0.1140*B + 0.5);
if (y<m.height/2)
mm.term[y*m.rowsize + x] = mm.term[y*m.rowsize + x + 1] =
mm.term[y*m.rowsize + x + 2] = gray;
else{mm.term[y*m.rowsize + x] = B;
mm.term[y*m.rowsize + x + 1] = G;
mm.term[y*m.rowsize + x + 2] = R; }
}
return mm;
}
張貼留言