如何在 C++ 中更改 RGB 值
How to change RGB values in c++
对于可能被考虑的问题,我深表歉意"newbie,",但我才刚刚开始学习如何使用 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)。我的问题是我到底该怎么做?打开文件后,如何用另一个值替换每三个数字?
非常感谢任何帮助。谢谢!
http://en.wikipedia.org/wiki/JPEG 查找文件格式以及它们如何以二进制形式存储。它与其他文件不同。
我觉得这个问题的潜力被忽略了,因为不相关的代码片段和误导性的打开和阅读文本文件部分。
您可以在 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)
}
对于可能被考虑的问题,我深表歉意"newbie,",但我才刚刚开始学习如何使用 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)。我的问题是我到底该怎么做?打开文件后,如何用另一个值替换每三个数字?
非常感谢任何帮助。谢谢!
http://en.wikipedia.org/wiki/JPEG 查找文件格式以及它们如何以二进制形式存储。它与其他文件不同。
我觉得这个问题的潜力被忽略了,因为不相关的代码片段和误导性的打开和阅读文本文件部分。
您可以在 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)
}