Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сделать BMP чернобелым и сохранить в другой файл 
:(
    Опции темы
BCworm
Дата 15.1.2010, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 23.8.2007

Репутация: нет
Всего: нет



Привет всем.
С большим трудом разобрался с заголовком BMP. Получил все параметры (размер палитру и т.д.) Но встала проблема. Как сделать из цветного рисунка чернобелый grayscale и скохранить в другой файл. В графических программах это делается уменьшением насыщенности но в заголовке BMP этого нет. Как быть? 
Если я правильно понял необходимо RGB значения каждого пиксела? Но опять же как
Помогите пожалуйста.


PM MAIL   Вверх
586
Дата 15.1.2010, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 57
Всего: 146



Алгоритм такой:
Код
grayColor = (R + G + B) / 3;
R = grayColor;
G = grayColor;
B = grayColor;

PM   Вверх
artsb
Дата 15.1.2010, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



BCworm, поищите, мы где-то решали уже этот вопрос.

Добавлено через 7 минут и 26 секунд
Кое-что нашёл: ч/б
Правда не у нас на форуме smile


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
BCworm
Дата 15.1.2010, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 23.8.2007

Репутация: нет
Всего: нет



Спасибо большое. Ну как заменить я примерно понял чтото вроде этого 
Код

bmpheader.red = grayColor;
bmpheader.green = grayColor;
bmpheader.rblue = grayColor;


Но как потом сохранить правильно. К примеру если я открыл и считал заголовки так:
...
Код

FILE *fin,*fout;  \\fin -input    fout-output
fin = fopen("pic.bmp","rb+");
fread(&bmpheader,sizeof(bmpheader),1,fin);
bmpheader.red = grayColor;
bmpheader.green = grayColor;
bmpheader.rblue = grayColor;


то как записать
Код

..
fout=fopen("graypic.bmp","wb+");
fwrite(&bmpheader,sizeof(bmpheadere),1,fout);


Как то так?

Это сообщение отредактировал(а) BCworm - 15.1.2010, 11:16
PM MAIL   Вверх
artsb
Дата 15.1.2010, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



BCworm, всё не так просто... О нюансах читайте здесь.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
BCworm
Дата 18.1.2010, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 23.8.2007

Репутация: нет
Всего: нет



Да я читал это. Там все про те же заголовки. Если я правильно понял то нужно делать както вот так
1. Открыть файл для записи
2. Записать заголовок BMP
3. Записать палитру
4. И наконец записать битмап

Я пробовал вот так
Код

struct  head { \\это заголовок
        short bftype;
        long  bfsize;
        short rez1, rez2;
        long  bfoffbits;
        long  bisize;
        long  biwidth;
        long  biheight;
        short biplanes;
        short bibitcount;
        long  bicompression;
        long  bisizeimage;
        long  bix;
        long  biy;
        long  biclrused;
        long  biclrimp;
} head_file;

unsigned char palitra[256][4];

struct TPaletteStruct { \\это палитра
  unsigned char Red;
  unsigned char Green;
  unsigned char Blue;
 }Palette;

struct pixel{ \\это битовая карта
char R;
char G;
char B;
};


считав это все  пробую менять цвет
Код

Palette.Blue=234;
Palette.Green=54;
Palette.Red=100;


а потом записать в новый файл
Код

fout=fopen("gray.bmp","wb");
fwrite(&head_file,sizeof(head_file),1,fout);
fwrite(&Palette,sizeof(Palette),1,fout);
fwrite(&pixel,sizeof(pixel),1,fout);


Но увы файл создается и заголовок и палитра читается но изображения нет. Помогите пожалуйста уже совсем замучился smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0782 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.