我为可能被视为“新手”的问题道歉,但我刚开始学习如何使用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)。我的问题是我该怎么做?打开文件后,如何用其他值替换每个第三个数字?
我非常感谢任何帮助。谢谢!
答案 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查找文件格式以及它们如何以二进制形式存储。它与其他文件不同。