![]() |
Составной (многослойный) рисунок. Как сделать?
Доброго времени суток. Занялся я созданием своей ККИ (карточно коллекционная игра) и сейчас пишу "конструктор" карт к ней, который будет одновременно и БД карт. С текстом и его сохранением все понятно, а вот графика, тут нужна помощь. Дело в том что по мере выбора различных свойств карт, в программе должна отрисовываться сама карта. Выбрал тип карты - существо. Отрисовало базовую заготовку карты существа. Выбрал ранг существа - Герой. Добавило золотую каёмочку. Выбрал фракцию существа - Воин. Добавило красный ободок внутри. Выбрал класс - Варвар. Добавило на карте значок варвара. Ну и так далее. Тоесть нужно чтобы в зависимости от выбора пунктика, прога накладывала текстуры и в конце мы получим рисунок готовой карты. По сути получается многослойный рисунок. Изначально я банально думал что будут создаваться новые PictureBox и накладываться друг на друга, но проблема в прозрачности. Они попросту перекрывают друг друга, хотя в заготовках пустое место прозрачное. Сейчас я уже понял что это глупо и другого и ожидать не стояло, но я не знаю что делать ( Подскажите как можно решить эту задачу. Уже ни на одном форуме писал, все молчат (
|
Около 10 месяцев назад работал над приложением для взаимодействия с неким контроллером (язык С++, но это неважно). И необходимо было отрисовывать графики данных поступающих с контроллера в реальном времени. Обычное рисование не подходило. Начал упорно гуглить в поисках решения. Нагуглил WinApi функцию(сейчас не могу назвать ее имя, не помню). Суть функции в том, что определенному битмапу соответствовал некий массив, размерность которого количество пикселей битмапа.
Работала такая отрисовка во много раз быстрее обычной. Как вариант можно использовать заготовки битмапов, считывать с них пиксели в массив (есть и такая функция), "накладывать друг на друга массивы" и выводить это в битмап. В теории так) Если необходимо, вечером могу сказать имя функции. P.S. Функции SetDIBits/GetDIBits. Вроде так. |
LilLoco,
не - он другое имеет в виду. хотя твой способ хорош. у мя тож были проблемы с прорисовкой WinApi и буферизация спасала. а вообще ответ на вопрос такой. В .Net для C# предусмотрен такой класс как graphics. Это область прорисовки, которой обладают все элементы, в том числе и picturebox, да и WinForm тоже. По сути выбор элемента, в котором будет рисоваться, это всего лишь границы рисования и удобнее всего брать обычный picturebox. работает graphics так. graphics _graph = picturebox.GetGraphics(); както так.. точно непомню. тем самым все, что будет происходить с _graph будет автоматом прорисовываться в границах picturebox. а дальше уже дело фантации. набор функций там достаточно большой, можно получать пиксели с уже готовых рисунков-шаблонов, можно программно рисовать по линиям, точкам, фигурам и заливкам. |
Время: 15:00. |
Время: 15:00.
© OSzone.net 2001-