Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Gray->RGB


Автор: ShurikA 20.3.2006, 14:44
Такая тема:
есть обьект CImage imgOriginal который в себе держит картинку.
если я хочу сохранить етот imgOriginal в фаил вместе ц нарисованными на той же картинке линиями делаю следующее:
Код

CDC* dcMemory = CDC::FromHandle(imgOriginal.GetDC());
measureMgr->Paint(dcMemory, TRUE);
imgOriginal.ReleaseDC();
.
.
.
и продолжаю сохранять...

measureMgr->Paint отрицовывает в dcMemory всё что нужно.
Всё прекрасно работает кроме одного:
если картинка цветная, то всё сохраняется в цвете, б таком как и был нарисован.
если же картинка Gray то сохраняется всё серым цветом.
Я так понимаючто что бы всё сохранялось в цвете нужно переделать imgOriginal в цветную...
Как?

Автор: Romikgy 20.3.2006, 15:25
Цитата(ShurikA @ 20.3.2006, 13:44 Найти цитируемый пост)
если же картинка Gray то сохраняется всё серым цветом.

непонятно????
все сохраняется оттенками серого
Цитата(ShurikA @ 20.3.2006, 13:44 Найти цитируемый пост)
Я так понимаючто что бы всё сохранялось в цвете нужно переделать imgOriginal в цветную...

то есть ты хочешь что б картинка , которая в грее, перекодилась в цветное изображение?

Автор: ShurikA 20.3.2006, 15:43
Цитата(Romikgy @ 20.3.2006, 14:25 Найти цитируемый пост)
все сохраняется оттенками серого

Прав!


Цитата(Romikgy @ 20.3.2006, 14:25 Найти цитируемый пост)
то есть ты хочешь что б картинка , которая в грее, перекодилась в цветное изображение?

именно так...

Автор: Romikgy 20.3.2006, 15:58
Цитата(ShurikA @ 20.3.2006, 14:43 Найти цитируемый пост)
именно так...

ну так обработай каждый пискель, оттенок серого приравняй к R,G,B и будет те счастье

Автор: Earnest 20.3.2006, 17:47
Цитата(Romikgy @ 20.3.2006, 15:58 Найти цитируемый пост)
ну так обработай каждый пискель, оттенок серого приравняй к R,G,B и будет те счастье

Не надо. Проще предварительно скопировать из контекста серого растра в другой мемори контекст, который создать как цветной.

Автор: ShurikA 20.3.2006, 23:04
Цитата(Earnest @ 20.3.2006, 16:47 Найти цитируемый пост)
Не надо. Проще предварительно скопировать из контекста серого растра в другой мемори контекст, который создать как цветной.

и как это сделать?

Автор: Earnest 21.3.2006, 14:45
1) Создать новый CImage, такого же размера, но полноцветный.
2) Попросить у него контекст
3) Скопировать туда оригинальный Image
4) Нарисовать поверх все, что тебе нужно
5) Сохранить новый Image в файл...

Автор: ShurikA 21.3.2006, 17:33
Цитата(Earnest @ 21.3.2006, 13:45 Найти цитируемый пост)
1) Создать новый CImage, такого же размера, но полноцветный.

Это всё понятно, но я не нашёл каким образом я сообщаю CImage что он полноцветный?

Автор: Earnest 21.3.2006, 17:56
А каким образом ты сообщаешь ему размеры? Параметр nBPP ни о чем не говорит?
Цитата(MSDN)

Creates a CImage bitmap and attach it to the previously constructed CImage object.

BOOL Create(
  int nWidth,
  int nHeight,
  int nBPP,
  DWORD dwFlags = 0
) throw( );

Автор: ShurikA 21.3.2006, 18:20
Можно подумать что нет 8 битных цветных картинок...

Автор: Earnest 22.3.2006, 08:31
8-битные цветные отличаются от 8-битных серых палитрой. Если ты хочешь именно 8-битную цветную картинку, то установи новую палитру. Но тогда часть серых цветов исказится.

Автор: ShurikA 22.3.2006, 09:48
Цитата(Earnest @ 22.3.2006, 07:31 Найти цитируемый пост)
Но тогда часть серых цветов исказится.

И этом нет спору... smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)