楼主: 
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;
}