Canvas - это круто! - страница 6

Vitaly Muzichenko
16859
Vitaly Muzichenko  
Vladimir Karputov:

canvas.Rectangle - это не объект, это команда на рисование кучи пикселей. Это как выстрел - вылетела пуля и поминай как звали. Никакой обратной связи.

Спасибо, что связи нет - понял

Rashid Umarov:

Есть статья Изучаем класс CCanvas. Реализация прозрачности графических объектов , там должно быть решение.

Я её раз 217 смотрел, и сейчас открыта, но решения так не увидел.

Нужен живой пример изменения цвета холста и рамки в OnTick().

Спасибо!

Vladimir Karputov
Модератор
263668
Vladimir Karputov  
Vitaly Muzichenko:

Спасибо, что связи нет - понял

Я её раз 217 смотрел, и сейчас открыта, но решения так не увидел.

Нужен живой пример изменения цвета холста и рамки в OnTick().

Спасибо!

На базе своего кода просто влепил изменение цвета холста и рисование рамки.

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   static long counter=0;
   counter++;
   if(counter%40==0)
     {
      m_canvas.Erase(ColorToARGB(clrBlue,210));
      m_canvas.Rectangle(10,10,m_canvas.Width()-10,m_canvas.Height()-10,ColorToARGB(clrRed,255));
      m_canvas.Update();
      return;
     }
   if(counter%20==0)
     {
      m_canvas.Erase(ColorToARGB(clrRed,210));
      m_canvas.Rectangle(10,10,m_canvas.Width()-10,m_canvas.Height()-10,ColorToARGB(clrBlue,255));
      m_canvas.Update();
      return;
     }
  }


Так как я использую цвета с прозрачностью, то при создании канваса я указал "COLOR_FORMAT_ARGB_NORMALIZE":

//--- create canvas
   if(!m_canvas.CreateBitmapLabel("SampleCanvas",5,15,700,300,COLOR_FORMAT_ARGB_NORMALIZE))
Файлы:
Vitaly Muzichenko
16859
Vitaly Muzichenko  
Vladimir Karputov:

На базе своего кода просто влепил изменение цвета холста и рисование рамки.


Так как я использую цвета с прозрачностью, то при создании канваса я указал "COLOR_FORMAT_ARGB_NORMALIZE":

Сейчас погляжу, спасибо!

Что ожидал получить - получил давно, это едва прозрачный холст с рамкой и выделением, но сейчас нужно изменять цвета, что не получается.


Vladimir Karputov
Модератор
263668
Vladimir Karputov  
Vitaly Muzichenko:

Сейчас погляжу, спасибо!

Что ожидал получить - получил давно, это едва прозрачный холст с рамкой и выделением, но сейчас нужно изменять цвета, что не получается.


Вероятно проблема в ENUM_COLOR_FORMAT (при создании канваса) и в методе получения цвета. 

Nikolai Semko
8273
Nikolai Semko  
Vitaly Muzichenko:

В OnInit создаю холст

Далее нужно в OnTick изменять цвет в 10:00 на серый, а в 11:00 снова вернуть в первоначальное состояние.

Не работает:

Вопрос:

Как изменять цвет холста и рамки - нет привязки к именам объектов?

Спасибо!

У меня ощущение, что Вы с цветами намудрили.

Какой смысл в этой строчке:

ObjectSetInteger(0,"CanvasExamlple",OBJPROP_COLOR,clrNONE);

При формате COLOR_FORMAT_ARGB_NORMALIZE не нужно заливать канвас цветом фона, а достаточно залить его нулем:

canvas.Erase(0);

ибо это означает что канвас полностью прозрачен.

Также удобно пользоваться представлением цвета в 16-чном виде:

например:

0x00000000 - полностью прозрачный черный

0xFF000000 - непрозрачный черный

0xFFFFFFFF - непрозрачный белый

0xFFFF0000 - непрозрачный красный

0xFF00FF00 - непрозрачный зеленый

0xFF0000FF - непрозрачный синий

0x8000FF00 - полупрозрачный зеленый

0x80FFFFFF - полупрозрачный черный 

0xFF808080 - серый

и т.д.

Vitaly Muzichenko
16859
Vitaly Muzichenko  
Vladimir Karputov:

Вероятно проблема в ENUM_COLOR_FORMAT (при создании канваса) и в методе получения цвета. 

Проблема решена. 

У меня в коде не было при закрытии терминала удаления холста, соответственно при запуске он уже был на графике, поэтому не инициализировался, и изменения свойств не знало куда применяться.

Всем спасибо!

Vitaly Muzichenko
16859
Vitaly Muzichenko  
Nikolai Semko:

У меня ощущение, что Вы с цветами намудрили.

Какой смысл в этой строчке:

ObjectSetInteger(0,"CanvasExamlple",OBJPROP_COLOR,clrNONE);

Смысл строки в том, что без неё получаем вот такую картину


Если со строкой, тогда всё верно, красивая рамочка с выбранным мной цветом


Vladimir Karputov
Модератор
263668
Vladimir Karputov  
Vitaly Muzichenko:

Проблема решена. 

У меня в коде не было при закрытии терминала удаления холста, соответственно при запуске он уже был на графике, поэтому не инициализировался, и изменения свойств не знало куда применяться.

Всем спасибо!

Хм, вот уж действительно, так сразу и не угадаешь где собака порылась :)

Nikolai Semko
8273
Nikolai Semko  

Демонстрация скрипта с растровым масштабированием 

В файле Ex5 сидит достаточно большой BMP файл в виде ресурса.


Файлы:
TestScaling.ex5  784 kb
Georgiy Merts
9959
Georgiy Merts  
Nikolai Semko:

Демонстрация скрипта с растровым масштабированием 

Не, реально впечатляет.

Но, надо сделать какую-то ПОЛЕЗНУЮ примочку, которая бы использовала все эти возможности Canvas.

Чтобы ваши наработки не постигла судьба адаптера CGA - прекрасного графического адаптера, непонятого и недооценненого современниками.

Я и сам всегда считал CGA - "отстоем, каких мало", проигрывающем восьмиразрядной графике Commodore 64 или Sinclair Spectrum. А недавно вот, оказалось, что просто из-за малой популяризации - практически никто не использовал все богатые возможности этой карты. И игр, которые бы могли конкурировать с восьмиразрядными бытовыми компьютерами на нем практически не выходило.

Займись фирма IBM популяризацией возможностей CGA,  появись вот эта демка в 1981 году - CGA был бы куда популярней, и,  возможно, и EGA бы вышел позже:


Смотрю на это богатство красок, и даже не верится, что такое возможно на старом адаптере CGA, с его 16К видеопамяти, подключенном к обычному бытовому телевизору (RGB-монитор для этого совершенно не годится, в этом и была задумка разработчиков - более качественный текст на RGB-мониторе, но при этом бедная цветовая графическая палитра, но богатые графические возможности при плохо читаемом тексте на бытовом телевизоре с композитным входом)