// <<>><<>><<>><>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><>><<>
// Программа чтения 3-канальной матрицы изображения и сохранения ее в формате BMP
// <<>><<>><<>><>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><>><<>
#include "stdafx.h"
#include "windows.h" //Включение файла определения API-функций Windows
#define ALING4(x) ((((x)-1)/4+1)*4) //Макрос - дополнение величины до ближайшей кратной 4
typedef struct tagRGBQUAD { //---------error C2011: tagRGBQUAD: переопределение типа "struct"
BYTE rgbBlue; // Интенсивность синего
BYTE rgbGreen; // Интенсивность зеленого
BYTE rgbRed; // Интенсивность красного
BYTE rgbRserved; // Не используется
} RGBQUAD;
struct S4Bit //Структура для доступа к 4-битным изображениям
{
BYTE b1:4;
BYTE b2:4;
};
int main(int argc, char* argv[])
{
BITMAPFILEHEADER File; //Структура заголовока файла
BITMAPINFOHEADER Head; //Структура параметров растра
RGBQUAD bmiData[2]; //Таблица цветов,
//не используется для 24-битных изображений
for (int i=0; i<2; i++){
bmiData[i].rgbBlue = i*255; //---------error C2027: использование неопределенного типа "tagRGBQUAD"
//---------error C2228: выражение слева от ".rgbBlue" должно представлять класс, структуру или объединение
bmiData[i].rgbGreen = i*255; //--------error C2027:...
//--------error C2228:...
bmiData[i].rgbRed = i*255;//--------error C2027:...
//--------error C2228:...
bmiData[i].rgbReserved = 0;//--------error C2027:...
//--------error C2228:...
}
BYTE Bitmap[480][640/8]; //Матрица изображения
//Открытие файла матрицы изображения
HFILE hFile=_lopen("c:\\Лабораторные_работы_ГИС\\BMP\\color2.mtx",OF_READ);
if (hFile != HFILE_ERROR) //Если файл открылся нормально
{
_lread(hFile,Bitmap,480*640/8); //Читаем матрицу изображения
_lclose(hFile); //закрываем файл
//Определяем параметры файлового заголовка
ZeroMemory(&Head,sizeof(Head)); //Заполнение структуры нулевыми значениями
//Заполнение необходимых полей параметров растра
Head.biSize=40;
Head.biHeight=480;
Head.biWidth=640;
Head.biPlanes=1;
Head.biBitCount=1;
Head.biCompression=0;
Head.biSizeImage=0;
Head.biXPelsPerMeter=72;
Head.biYPelsPerMeter=72;
Head.biClrUsed=2;
Head.biClrImportant=2;
//Заполнение структуры заголовка файла
File.bfOffBits=sizeof(Head) + 8 + sizeof(File);
File.bfSize=sizeof(File) + 8 + sizeof(Head) + 640/80*480; //Размер файла
File.bfType='B' + (int)'M'*256; //Тип файла
//Создание нового файла на диске с именем 1.bmp
hFile=_lcreat("c:\\Users\\442\\newPic.bmp",0);
if (hFile != HFILE_ERROR)
{
_lwrite(hFile,(const char *)&File,sizeof(File)); //Сохранение заголовка файла
_lwrite(hFile,(const char *)&Head,sizeof(Head)); //Сохранение параметров растра
_lwrite(hFile,(const char *)&bmiData, 8); //Сохранение параметров растра
_lwrite(hFile,(const char *)Bitmap,480*640/80); //Сохранение матрицы изображе-ния
_lclose(hFile); //Закрытие файла
}
else MessageBox(0,L"Ошибка создания файла BMP",L"Ошибка",MB_OK);
}
else MessageBox(0,L"Ошибка открытия файла изображения",L"Ошибка",MB_OK);
return 0;
}