Доброго времени суток!
Не получается разобраться с палитрами...
Задача:
Отрисовка карты высот.
Есть массив: unsigned short *data;
Надо отрисовывать его в окне. При этом хотел сделать свою палитру, чтоб значениям высот (от0 до 65535) поставить в соответствие цвета.
На MSDN написаны какие-то страшние вещи...
Или слаб мой английский, или мозг, или MSDN...
Как мне реализовать мысль? Вчера сидел винтете до 3.00... ничего внятного не нашел... пиво не помогает...
He-e-e-lp!
Здравствуйте, -dron-, Вы писали:
D>Доброго времени суток! D>Не получается разобраться с палитрами... D>Задача: D>Отрисовка карты высот. D>Есть массив: unsigned short *data; D>Надо отрисовывать его в окне. При этом хотел сделать свою палитру, чтоб значениям высот (от0 до 65535) поставить в соответствие цвета.
Поясни, каким образом ты хочешь ставить высотам в соответствие цвета.
Высота 0. Цвет (RGB) ?
Высота 1 Цвет ?
...
Высота 65535 Цвет ?
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Поясни, каким образом ты хочешь ставить высотам в соответствие цвета.
PD>Высота 0. Цвет (RGB) ? PD>Высота 1 Цвет ? PD>... PD>Высота 65535 Цвет ?
Именно
Правда, я подозреваю, что придется это все конвертить и класть в битмап, а потом уже отрисовывать...
Но это так... домыслы
Что именно ? Я тебе вопрос задал, а ты не отвечаешь.
Еще раз
Высота 0. Цвет какой ? (в формате RGB)
Высота 1. Цвет какой ? (в формате RGB)
и т.д.
Я же за тебя домыслить не могу вид функции color = f(height).
With best regards
Pavel Dvorkin
Re[4]: Палитры... как с ними бороться
От:
Аноним
Дата:
29.11.05 10:45
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Что именно ? Я тебе вопрос задал, а ты не отвечаешь.
PD>Еще раз
PD>Высота 0. Цвет какой ? (в формате RGB) PD>Высота 1. Цвет какой ? (в формате RGB)
PD>и т.д.
PD>Я же за тебя домыслить не могу вид функции color = f(height).
Злой ты
Диапазон цветов должен менятся в зависимости от диапазона высот.
Поясняю: для движка требуется формат карты 2-х байтный (для рабоиы LODa), размер карты 2^n+1.
Т.е. диапазон значений карты высот всегда от 0 до 65535 и отдельно задается максимальное значение высоты для данной карты. Например: вариант1: size = 2049х2049, altExtent = 3200m и вариант2: size = 2049х2049, altExtent = 400m. В обоих вариантах данные полностью заполняют диапазон от 0 до 65535.
Значение функции color = f(height) должно зависеть от altExtent:
Высота 0м. rgb = 0,0,1.
Высота от 1м до 10м. rgb = песок(желтый).
Высота от 11м до 1000м. rgb = травка(зеленый).
Высота от 1001м до 2000м. rgb = камень(коричневый).
Высота от 2001м до 5000м. rgb = снег(светло серый).
Высота от 5001м до 10000м. rgb = *0п@(темно серый).
Я не могу понять, как заказать полутоновую палитру в нужном диапазоне...
И как обеспечить отображение...
Вчера сделал виртуальный экран, но отрисовка на нем с помощью SetPixel
Туплю, знаете-ли...
Может вообще отрисовывать по другому?
А>Высота 0м. rgb = 0,0,1. А>Высота от 1м до 10м. rgb = песок(желтый). А>Высота от 11м до 1000м. rgb = травка(зеленый). А>Высота от 1001м до 2000м. rgb = камень(коричневый). А>Высота от 2001м до 5000м. rgb = снег(светло серый). А>Высота от 5001м до 10000м. rgb = *0п@(темно серый).
Так. ну ладно. Желтый песок и зеленая травка — понятия растяжимые
В общем, надо сделать следующее.
Создай массив
RGB colors[65536];
и заполни его. Как — думай сам. colors[0] есть RGB для высоты 0. colors[1] есть RGB для высоты 1. И т.д.
Теперь вызываем
CreateDIBSection, заказав в BITMAPINFOHEADER biBitCount = 32. Т.е. создаем битовую карту DIB в формате 32 бита на пиксель.
CreateDIBSection вернет тебе указатель на биты (байты) карты. Это будет указатель на массив, который она сама выделила. Массив одномерный, естественно, но ты его рассматривай как двумерный из DWORD. Заполни ее, устанавливая каждый DWORD как colors[height] для этой точки.
Полученную битовую карту используй как обычно (BitBlt).
Посмотри в примерах к Visual Studio программу DIBLOOK, разберись с ней, и все поймешь.
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>В общем, надо сделать следующее.
Э-э-э... в общем сделал...
основная идея получилась. Прикладываю усилия для реализации деталей.
СПАСИБО ЗА ПОМОЩЬ!
PD>Про палитры забудь.
Фигушки мне теперь интересно нафиг они вообще нужны...
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Здравствуйте, -dron-, Вы писали:
D>>Фигушки мне теперь интересно нафиг они вообще нужны...
PD>Тяжелое наследие 16- и 256-цветных мониторов.
Ну в DirectDraw они успешно используются для повышения производительности.
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
Здравствуйте, ekamaloff, Вы писали:
D>>>Фигушки мне теперь интересно нафиг они вообще нужны...
PD>>Тяжелое наследие 16- и 256-цветных мониторов.
E>Ну в DirectDraw они успешно используются для повышения производительности.
А что, DirectDraw это сильно помогает?
Ох как с MFC тяжко поначалу...
Надо учить матчасть... но редактор моделей буду под OpenGL писать...
Здравствуйте, -dron-, Вы писали:
E>>Ну в DirectDraw они успешно используются для повышения производительности.
D>А что, DirectDraw это сильно помогает?
Иногда да. Весьма удобно делать различные эффекты вроде затухания, перелива цветов простым изменением значений в палитре.
D>Ох как с MFC тяжко поначалу...
Полностью согласен. Поначалу идет не столько программирование, сколько борьба с MFC.
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
Здравствуйте, ekamaloff, Вы писали:
E>Полностью согласен. Поначалу идет не столько программирование, сколько борьба с MFC.
Угу. Она меня поначалу дико раздражала. Ну прекрасно знаю, как это на Win API написать, 3 строчки всего надо, и думать даже не буду. Так нет, MFC мне свою логику навязывает, и очень с ней броться хочется
Потом привык.