struct TBMPHeader{
//заголовок файла
short Type;
//сигнатура BM 0x4D42
long Size;
//размер файла в байтах 3*H*W+54
long Reserved;
//зарезервировано 0
long OffsetBits;
//смещение изображения от начала файла 54
//информационный заголовок
long SizeH;
//размер заголовка 40 информационного заголовка
long Width;
//ширина изображения
long Height;
//высота изображения
short Planes;
//число плоскостей 1
short BitCount;
//глубина цвета, бит на точку 24
long Compression;
//тип еомпрессии(0 - несжатое изображение)
long SizeImage;
//разиер изображения, байт 3*W*H
long XPelsPerMeter; //горизонтальное разрешение, точка на метр 0
long YPelsPerMeter; //вертикальное разрешение, точка на метр 0
long ColorUsed; //число используемых цветов 0
long ColorImportant;//число основных цветов 0
};
struct TBGR {
unsigned char b;
unsigned char g;
unsigned char r;
};
LoadBMPFile(char *fname){
TBMPHeader BMPHeader;
FILE *f;
if ((f = fopen(fname,"rb")) == NULL){
cout<<"Ошибка открытия файла";
return;
}
fread(&BMPHeader,sizeof(TBMPHeader),1,f);
TBGR *inBGR = new TBGR[BMPHeader.Width]; //массив указателей на слова
while(!feof(f)){
fread(inBGR,3*BMPHeader.Width,1,f);
// Здесь делаете преобразования и тут же записываете в новый файл или используете по своему усмотрению.
}
fclose(f);
}
Y = 0.299*R + 0.587*G + 0.114*B I = 0.596*R - 0.274*G - 0.322*B Q = 0.212*R - 0.523*G + 0.311*B и обратно: R = 1.0*Y + 0.956*I + 0.621*Q G = 1.0*Y - 0.272*I - 0.647*Q B = 1.0*Y - 1.105*I + 1.702*Q
А в чем возникает сложность?
То есть нужна форма, в которой можно выбрать файл, его показать и т.д.?
В таком случае, укажите, откуда Вы должны считывать исходную картинку: из файла BMP или с определенной области экрана?
struct TBMPHeader{
//заголовок файла
short Type; //сигнатура BM 0x4D42
long Size; //размер файла в байтах 3*H*W+54
long Reserved; //зарезервировано 0
long OffsetBits; //смещение изображения от начала файла 54
//информационный заголовок
long SizeH; //размер заголовка 40 информационного заголовка
long Width; //ширина изображения
long Height; //высота изображения
short Planes; //число плоскостей 1
short BitCount; //глубина цвета, бит на точку 24
long Compression; //тип еомпрессии(0 - несжатое изображение)
long SizeImage; //разиер изображения, байт 3*W*H
long XPelsPerMeter; //горизонтальное разрешение, точка на метр 0
long YPelsPerMeter; //вертикальное разрешение, точка на метр 0
long ColorUsed; //число используемых цветов 0
long ColorImportant;//число основных цветов 0
};
LoadBMPFile(char *fname){
TBMPHeader BMPHeader;
FILE *f;
if ((f = fopen(fname,"rb")) == NULL){
cout<<"Ошибка открытия файла";
return;
}
fread(&BMPHeader,sizeof(TBMPHeader),1,f);
TBGR *inBGR = new TBGR[BMPHeader.Width]; //массив указателей на слова
while(!feof(f)){
fread(inBGR,3*BMPHeader.Width,1,f);
// Здесь делаете преобразования и тут же записываете в новый файл или используете по своему усмотрению.
}
fclose(f);
}
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.