尊敬的专家。有一项任务 - 在文件(图片 .bmp)中写下某个文本。文本必须取自文件并写入现有图像。我用谷歌搜索,并决定我需要以二进制形式打开图像文件,但问题是我不知道如何读取这些相同的位。我得到了各种 abra cadabra。所以问题是,需要做什么才能以数字表示的形式将一些字符写入每个字节的末尾,直到消息结束?我写了这段代码:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main() {
string data = "I:\\NumMet\\bmp\\data.txt";
string image = "I:\\NumMet\\bmp\\bmp.bmp";
string message = "";
ifstream fin(data);
ifstream fin2(image, ios::binary);
if (!fin.is_open() && !fin2.is_open()) {
cout << "File not open";
return 0;
}
// считываю текст для записи в картинку
char ch;
int count = 0;
while (fin.get(ch)) {
message += ch;
count++;
}
cout << count << ' ';
cout << message;
fin.close();
// скипаю байты на всякий случай
int i = 0;
fin2.seekg(256);
// проверяю, что достаточно пикселей для записи
i = 0;
while (fin2.get(ch) && i < count) {
i++;
}
if (i < count) {
cout << "picture is small";
}
else {
cout << "Good";
// замена битов картинки на биты символов.
}
fin2.close();
}
在其中,我读取要写入的消息,跳过几个字节以免损坏系统数据(但我没有确切找到要跳过多少,所以我留了一点余地)并在检查是否有足够的像素后为了记录,我必须写相同的数据。