如何在c ++中更改RGB值

时间:2015-02-07 23:41:40

标签: c++ image ppm

我为可能被视为“新手”的问题道歉,但我刚开始学习如何使用c ++。我知道如何读取和写入文本文件,但是如果我想打开图像文件,它是否与打开普通文本文件相同,还是不同?我相信它是不同的,因为当我将文件拖到CodeBlocks来检查它时,它只是使用数字。例如,第4行是13 33 66,第19行是15 28 80.

#include <iostream>
#include <fstream>

using namespace std;

int main()
{

    ifstream file_reader("file_name_example.ppm", ios::binary | ios::out);

    if (! file_reader.is_open())
    {
        cout << "The file cannot open." << endl;
    }


return 0;

我只想改变图像的蓝色值,所以我理解我需要做一个for循环来做每三个值(R G B)。我的问题是我该怎么做?打开文件后,如何用其他值替换每个第三个数字?

我非常感谢任何帮助。谢谢!

2 个答案:

答案 0 :(得分:1)

我觉得这个问题的潜力被忽略了,因为无关紧要的代码片段和误导性的开放和阅读文本文件部分。

您可以使用windows.h(MFC)中的HBITMAP替换更改并将位图中的RGB值替换为

解决方案:

HBITMAP hBmp;
CCloneBitmap bmpClone;
HICON hIcon;
hBmp=LoadBitmap(AfxGetResourceHandle(),MAKEINTRESOURCE(ID_LIGHTCAR));
if(hBmp!=NULL)
{
  bmpClone.Clone(hBmp);
  DeleteObject(hBmp);
  bmpClone.ChangeColor(IRGB(0,0,0), IRGB(255,0,0));
  // change BLACK pixels to RED ones. 
  //Change the IRGB values to whatever you would like - blue - IRGB(0,0,255) 
}

答案 1 :(得分:0)

http://en.wikipedia.org/wiki/JPEG查找文件格式以及它们如何以二进制形式存储。它与其他文件不同。