[分享] 无聊写的BMP档颜色相反处理

楼主: ymzk (电磁居士)   2014-07-03 20:27:04
前情提要 : BMP是个图档, 而BMP前面有54byte是记录著里面的一些属性而
后面的东西皆为图片的资料(24位元全彩图是这样的格式)
档头+属性介绍共54byte由于我写的程式是采用24bit全彩图(未压缩)
所以后面没有调色盘的资料, 直接就是图片内容, 而内容则
RGBRGBRGB....这样一直排列下去一个R或G或B使用1byte
而互补色(颜色相反公式为 (255-r, 255-g, 255-b)), 所以输出的档案为前54byte照抄
后面所有东西到底之前都是 把他转成数字 在用255去减去他 在输出即可~
==========以下为CODE==========
//use Dev C++
#include <iostream>
#include <fstream> //存取档案
#include <string>
using namespace std;
int main(int argc, char** argv) {
cout << "《BMP图片颜色相反程式》" << endl;
cout << "此程式读取之档案限“*.BMP”格式且属性为";
cout <<“未压缩”、“24bit全彩”图档" << endl;
cout << "程式设计:ymzk" << endl;
while(true) {
string input_filename, output_filename;
cout << "请输入要开启的档案:";
getline(cin, input_filename);
cout << "请输入要储存的档案:";
getline(cin, output_filename);
fstream input, output;
input.open(input_filename.c_str(), ios::in | ios::binary);
output.open(output_filename.c_str(), ios::out | ios::binary);
cout << "处理中..." << endl;
unsigned char temp;
for(int i = 0l i < 54; i++) {
if(input.good()) {
input.read((char*)&temp, 1);
output.write((char*)&temp, 1);
}
else break;
}
while(input.good()) {
input.read((char*)&temp), 1);
temp = (char)(255 - (unsigned int)temp);
output.write((char*)&temp, 1);
}
input.close();
output.close();
cout << "已完成。" << endl;
}
return 0;
}
作者: EdisonX (卡卡兽)   2014-07-03 21:17:00
耶..其实你漏了蛮多考量的,不过作最基础教材是还...ok 吧像是 each row alignment to 4's multiple 就没考量.
作者: xvid (DivX)   2014-07-03 21:29:00
cout 中文也挺酷的
作者: Qbsuran (Qbsuran)   2014-07-03 22:10:00
BMP是BGR吧
作者: PUTOUCHANG (自己的废文自己发)   2014-07-03 22:30:00
Bitwise NOT 比较好用
作者: MOONRAKER (㊣牛鹤鳗毛人)   2014-07-03 23:06:00
没错bitwise not卡实在
作者: KevinR (Kevin)   2014-07-04 09:25:00
一个byte一个byte处理为什么要考虑alignment?
作者: EdisonX (卡卡兽)   2014-07-04 11:32:00
@KevinR 是呐,这样连 offset 都处理掉了..
作者: q82419 (q82419)   2014-07-04 19:56:00
for(int i = 0l i < 54; i++)另外 何不考虑openCV
作者: KevinR (Kevin)   2014-07-04 20:04:00
现在影像处理作业可以用openCV囉?
作者: suhorng ( )   2014-07-04 22:04:00
建议不要习惯数字开头加 0,上次有人就这么做,结果…… 
作者: xvid (DivX)   2014-07-04 22:34:00
变八进制
作者: prismwu   2014-07-04 22:41:00
00000000000000O0000000O000000000000O000000O000OOOOOOOO
作者: bibo9901 (function(){})()   2014-07-04 23:56:00
他应该是把分号打成小写L而已 ...XD
作者: Killercat (杀人猫™)   2014-07-05 19:21:00
单单写这个来讲OpenCV不会比较快 :D

Links booklink

Contact Us: admin [ a t ] ucptt.com