Преобразование цвета битмапа в оттенки серого |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Преобразование цвета битмапа в оттенки серого |
Гробовщик |
Сообщение
#1
|
Группа: Пользователи Сообщений: 3 Пол: Мужской Репутация: 0 |
Есть необработанный файл (массив данных). Все это выводится на экран посредством битмапа. Не могу вывести это в оттенках серого. Мучался с палитрой, не вышло. Как?
|
Ozzя |
Сообщение
#2
|
Гуру Группа: Пользователи Сообщений: 1 220 Пол: Мужской Репутация: 16 |
Код Gray := Round((0.30 * GetRValue(RGBColor)) + (0.59 * GetGValue(RGBColor)) + (0.11 * GetBValue(RGBColor ))); Result := RGB(Gray, Gray, Gray); |
Altair |
Сообщение
#3
|
Ищущий истину Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: 45 |
Цитата Не могу вывести это в оттенках серого. надеюсь 256 палитра ? Есть один способ. заметь, что через каждые 16, в палитре начинается цветвой "блок", там цвета начинаются от светлого к темному (или наоборот - не важно). а http://forum.pascal.net.ru/index.php?showtopic=9037&hl= вот тут я указывал, что от 16 до 32 идет ч\б палитра. Попробуй сопоставить каждому цвету , цвет из этого интервала. Это вариант преобразования без смены палитры. Есть конечно вариант со сменой палитры. вот пример для следующих режимов: VGA, VESA и еще какого-то нестандартного режима, Инициализация режимов (на всякий случай)... asm а вот смена палитры: procedure SetPalette; assembler; { гбв ®ўЄ Ї «Ёвал } если теперь строки add dh,[si+1] заменить на add dh,[si+1] то получим генерацию ч\б палитры. т.е. вот так: procedure SetPalette; assembler; { гбв ®ўЄ Ї «Ёвал } Вот тебе полезный модуль: unit Global; а вот пример его использования: uses -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Гробовщик |
Сообщение
#4
|
Группа: Пользователи Сообщений: 3 Пол: Мужской Репутация: 0 |
То Altair: спасибо, этот модуль пригодится. Но хотелось бы под виндовс подкопаться без ассемблера. Скорее нужно рыть в сторону заголовка. У меня не проходит следующий код:
Код var LogPalette: PLogPalette; I: Integer; begin GetMem(LogPalette, SizeOf(TLogPalette) + (NumShades-1)*SizeOf(TPaletteEntry)); LogPalette.palVersion := $300; LogPalette.palNumEntries := 256; for I := 0 to 256 do begin LogPalette.palPalEntry[I].peRed := I; LogPalette.palPalEntry[I].peGreen := I; LogPalette.palPaLEntry[I].peBlue := I; LogPalette.palPalEntry[I].peFlags := 0; end; Result := CreatePalette(LogPalette^); FreeMem(LogPalette) В общем result напрямую присваиваю в один из параметров структуры HBitmap. Не проходит. |
Гробовщик |
Сообщение
#5
|
Группа: Пользователи Сообщений: 3 Пол: Мужской Репутация: 0 |
Все. Тема закрыта. Спасибо за ответы.
|
Altair |
Сообщение
#6
|
Ищущий истину Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: 45 |
Цитата Но хотелось бы под виндовс подкопаться без ассемблера Так надо было сразу скзаать, что ты в 32 бита пишешь. Есть ведь специальный форум для этого. Цитата Все. Тема закрыта. Спасибо за ответы. Жалко конечно, что ты не сказал как решил проблемму. Заходи на форум еще ! -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Текстовая версия | 11.01.2025 5:24 |