Вопрос № 182373: Здраствуйте уважаемые эксперты! Столкнулся с проблемой. Помогите, пожалуйста. Необходимо в Visual Studio C++ 2008 реализовать интерфейс программы, которая преобразует картинку в формате bmp из RGB в YIQ и обратно. Большое спасибо за помощь! ...
Вопрос № 182373:
Здраствуйте уважаемые эксперты! Столкнулся с проблемой. Помогите, пожалуйста. Необходимо в Visual Studio C++ 2008 реализовать интерфейс программы, которая преобразует картинку в формате bmp из RGB в YIQ и обратно. Большое спасибо за помощь!
и обратно: 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); }
Дополнение ответа по просьбе отвечавшего.
-----
∙ Отредактировал: Киселёва Алёна aka Verena (Профессор)
∙ Дата редактирования: 04.03.2011, 13:00 (время московское)
Ответ отправил: Павел Юрьевич (10-й класс)
Ответ отправлен: 04.03.2011, 11:29
Номер ответа: 266082 Россия, Челябинск ICQ # 197232777
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 266082
на номер 1151 (Россия) |
Еще номера »
Оценить выпуск »
Нам очень важно Ваше мнение об этом выпуске рассылки!
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.