Помогите. Для режима 256 цветов, при загрузке новой системной палитры при активации приложения, функции рисования типа Ellipse, LineTo не видят загруженных цветов, а используют 16 стандартных, тоже делает и функция GetNearestColor. Хотя функция GetSystemPaletteEntries возвращает загруженную палитру правильно.Возможно есть какая-нибудь фишка в винде поэтому поводу?
Здравствуйте, ksi, Вы писали:
ksi>Помогите. Для режима 256 цветов, при загрузке новой системной палитры при активации приложения, функции рисования типа Ellipse, LineTo не видят загруженных цветов, а используют 16 стандартных, тоже делает и функция GetNearestColor. Хотя функция GetSystemPaletteEntries возвращает загруженную палитру правильно.Возможно есть какая-нибудь фишка в винде поэтому поводу?
По поводу палитр там много разных фишек было. К сожалению, давно уже с эти не сталкивался, поэтому сходу сказать не могу. Можете привести куски кода с CreatePalette/AnimatePalette/RealizePalette и т.п.?
Здравствуйте, 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 стандартных цветов, а не чистый цвет из палитры.
Здравствуйте, ksi, Вы писали:
ksi>br.CreateSolidBrush(PALETTERGB(r,g,b));
ksi>получается цвет разбитый на 16 стандартных цветов, а не чистый цвет из палитры.
Ааа, в этом смысле...
PALETTERGB явно лажает. Это и не удивительно, учитывая что он работает безотносительно к какому-либо DC.
Если Вы и так знаете индекс в палитре, то используйте PALETTEINDEX() — этот макрос переводит WORD-индекс в формат COLORREF.
Если не знаете, то "обычный" RGB() должен помочь — при
выборе этой кисти цвет сам будет определяться как ближайший из возможных. Причем не обязательно из системной палитры, а изо всей доступной.
Главное — правильно обращаться с самой установкой палитры. Подробностей, к сожалению, не помню. Но помню точно что все работало как и описывалось. Правда все остальные окна на экране отображали кизяк (они, ессно, не обрабатывали сообщения об изменении аппаратной палитры), но зато мое окно рисовалось правильно
Здравствуйте, 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 цветами загружает нормально. Склоняюсь к тому что просто какая-то системная проблема на компьютере именно при работе с этими макросами.