Я пытаюсь прочитать окрашенные 16x16 bmp, но нет 1 pixel = 3 bits (RGB)
. Даже если первые 4-5 строк белые, а остальные черные, документ по-прежнему заполнен 255 255 255
для каждого пикселя.Напишите небольшой бит на консоли с помощью C++
В моем случае мне нужно показать это изображение на консоли, проанализировав слои RGB каждого пикселя, но с этим много проблем.
int main()
{
FILE* f = fopen("image.bmp", "rb");
unsigned char info[54];
fread(info, sizeof(unsigned char), 54, f); // read the 54-byte header
// extract image height and width from header
int width = *(int*)&info[18];
int height = *(int*)&info[22];
int size = 3 * width * height;
unsigned char * data = new unsigned char[size]; // allocate 3 bytes per pixel
fread(data, sizeof(unsigned char), size, f); // read the rest of the data at once
fclose(f);
for (int i = 0; i < size; i += 3)
{
unsigned char tmp = data[i];
data[i] = data[i + 2];
data[i + 2] = tmp;
}
unsigned int * byteData = new unsigned int[size];
for (int i = 0; i <= size; i++)
{
byteData[i] = (int) data[i];
}
for (int i = 0; i <= size/3; i++)
{
cout << i << ".\t" << byteData[i] << "\t" << byteData[i + 1] << "\t" << byteData[i + 2] << endl;
}
cout << endl;
cout << "=======================" << endl;
for (int j = 0; j < width; j++)
{
cout << j + 1 << ".\t";
for (int i = 0; i < height; i++)
{
//if ((int)data[j * width + i] >= 100 && (int)data[j * width + i + 1] >= 100 && (int)data[j * width + i + 2] >= 100)
if (((int) data[j * width + i] + (int) data[j * width + i + 1] + (int) data[j * width + i + 2])/3 <= 170)
cout << " ";
else cout << "*";
}
cout << endl;
}
getchar();
return 0;
}
Как я думаю, что проблема с байт и чтения Последовательности памяти Фром мусора, но если вы могли бы объяснить, где утечка?
[OT]: У вас есть 'зЬй :: VECTOR', чтобы избежать' новый [] '(и отсутствующий' удалить [] ') – Jarod42
[OT]: Вы также можете использовать 'std :: swap'. – Jarod42
У вас может быть проблема с выпуском и выравниванием для размера изображения. – Jarod42