256 цветов, палитра и функции рисования
От: ksi Казахстан  
Дата: 16.03.04 05:01
Оценка:
Помогите. Для режима 256 цветов, при загрузке новой системной палитры при активации приложения, функции рисования типа Ellipse, LineTo не видят загруженных цветов, а используют 16 стандартных, тоже делает и функция GetNearestColor. Хотя функция GetSystemPaletteEntries возвращает загруженную палитру правильно.Возможно есть какая-нибудь фишка в винде поэтому поводу?
Re: 256 цветов, палитра и функции рисования
От: Michael Chelnokov Украина  
Дата: 16.03.04 18:33
Оценка:
Здравствуйте, ksi, Вы писали:

ksi>Помогите. Для режима 256 цветов, при загрузке новой системной палитры при активации приложения, функции рисования типа Ellipse, LineTo не видят загруженных цветов, а используют 16 стандартных, тоже делает и функция GetNearestColor. Хотя функция GetSystemPaletteEntries возвращает загруженную палитру правильно.Возможно есть какая-нибудь фишка в винде поэтому поводу?


По поводу палитр там много разных фишек было. К сожалению, давно уже с эти не сталкивался, поэтому сходу сказать не могу. Можете привести куски кода с CreatePalette/AnimatePalette/RealizePalette и т.п.?
Re[2]: 256 цветов, палитра и функции рисования
От: ksi Казахстан  
Дата: 17.03.04 10:43
Оценка:
Здравствуйте, Michael Chelnokov, Вы писали:

MC>Здравствуйте, ksi, Вы писали:


ksi>>Помогите. Для режима 256 цветов, при загрузке новой системной палитры при активации приложения, функции рисования типа Ellipse, LineTo не видят загруженных цветов, а используют 16 стандартных, тоже делает и функция GetNearestColor. Хотя функция GetSystemPaletteEntries возвращает загруженную палитру правильно.Возможно есть какая-нибудь фишка в винде поэтому поводу?


MC>По поводу палитр там много разных фишек было. К сожалению, давно уже с эти не сталкивался, поэтому сходу сказать не могу. Можете привести куски кода с CreatePalette/AnimatePalette/RealizePalette и т.п.?


Проблема в том, что палитра устанавливается функцией RealizePalette, а при создании Brush с использованием цвета, который точно есть в палитре, и макроса PaletteRGB например

br:CBrush;
br.CreateSolidBrush(PALETTERGB(r,g,b));

получается цвет разбитый на 16 стандартных цветов, а не чистый цвет из палитры.
Re[3]: 256 цветов, палитра и функции рисования
От: Michael Chelnokov Украина  
Дата: 17.03.04 12:28
Оценка:
Здравствуйте, ksi, Вы писали:

ksi>br.CreateSolidBrush(PALETTERGB(r,g,b));

ksi>получается цвет разбитый на 16 стандартных цветов, а не чистый цвет из палитры.

Ааа, в этом смысле...
PALETTERGB явно лажает. Это и не удивительно, учитывая что он работает безотносительно к какому-либо DC.
Если Вы и так знаете индекс в палитре, то используйте PALETTEINDEX() — этот макрос переводит WORD-индекс в формат COLORREF.
Если не знаете, то "обычный" RGB() должен помочь — при выборе этой кисти цвет сам будет определяться как ближайший из возможных. Причем не обязательно из системной палитры, а изо всей доступной.

Главное — правильно обращаться с самой установкой палитры. Подробностей, к сожалению, не помню. Но помню точно что все работало как и описывалось. Правда все остальные окна на экране отображали кизяк (они, ессно, не обрабатывали сообщения об изменении аппаратной палитры), но зато мое окно рисовалось правильно
Re[4]: 256 цветов, палитра и функции рисования
От: ksi Казахстан  
Дата: 18.03.04 03:37
Оценка:
Здравствуйте, Michael Chelnokov, Вы писали:

MC>Здравствуйте, ksi, Вы писали:


ksi>>br.CreateSolidBrush(PALETTERGB(r,g,b));

ksi>>получается цвет разбитый на 16 стандартных цветов, а не чистый цвет из палитры.

MC>Ааа, в этом смысле...

MC>PALETTERGB явно лажает. Это и не удивительно, учитывая что он работает безотносительно к какому-либо DC.
MC>Если Вы и так знаете индекс в палитре, то используйте PALETTEINDEX() — этот макрос переводит WORD-индекс в формат COLORREF.
MC>Если не знаете, то "обычный" RGB() должен помочь — при выборе этой кисти цвет сам будет определяться как ближайший из возможных. Причем не обязательно из системной палитры, а изо всей доступной.

MC>Главное — правильно обращаться с самой установкой палитры. Подробностей, к сожалению, не помню. Но помню точно что все работало как и описывалось. Правда все остальные окна на экране отображали кизяк (они, ессно, не обрабатывали сообщения об изменении аппаратной палитры), но зато мое окно рисовалось правильно


ksi>Спасибо за информацию, пробовал я все и PALETTEINDEX и RGB и PALETTERGB ничего не работает, смотрел исходные коды VCL из Delphi и пробовал Visual C++, делаю все по документации. Но из этого ничего не выходит, хоть монитор разбей, все равно использует только 16 цветов даже не 20 (с 4-я расширенными цветами). Хотя BMP файлы с 256 цветами загружает нормально. Склоняюсь к тому что просто какая-то системная проблема на компьютере именно при работе с этими макросами.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.