Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Canvas умеет так быстро?

7.1K
26 октября 2005 года
miXme
44 / / 10.04.2005
Всем привет!

Что есть:
Есть 2 потока. 1-й для гуи, второй для обмена данными и их отрисовки. Форма(NavyPanel), на которой все рисуется, запускается в 1 потоке. На форме находится PaintBox(pb), на канве которого и происходит отрисовка. Есть массив из 512 маленьких картинок Bitmap( blackbit[]). Все картинки 19*19 пикселей. Выбор индекса картинки задается из массива int mybuf[512]. Во 2 потоке они с периодом Х наносяться на внеэкранный Bitmap(bit). bit имеет разmep 300*500. А затем bit разом отрисовывается на pb. pb имеет размер 350*585.

Отрезок кода из второго потока:
Код:
// изначально
//f_left=f_top=0;f_width=f_height=19;
//src.left=src.top=0;src.right=src.bottom=19;
void Decode(void)
{
  int id, id16;
  //начинаем с верхнего левого угла
  f_left = 0;
  f_top = 0;
  //по 16 битмэпов на 1 "строке"
  id16 = 0;
  for( id = 0 ; id < 512 ; id++ )
  {
    if( id16 == 16 )
    {
      id16 = 0;
      f_top += f_height;
      f_left = 0;
    }
    dest.top = f_top;
    dest.left = f_left;
    dest.right = dest.left + f_width;
    dest.bottom = dest.top + f_height;

    bit->Canvas->CopyMode = cmSrcCopy;
    bit->Canvas->CopyRect( dest, blackbit[ mybuf[ id ] ]->Canvas , src );

    f_left += f_width;
    id16++;
  }

  NavyPanel->pb->Canvas->Draw( 0 ,0, bit );
}



Проблема:
Функция определенное число раз(я его не знаю) отрисовывает на канве пэйнт бокса все нормально, но в какой-то момент изображение как бы застывает(при этом 2 поток работает и Decode вызывается и возвращает управление). Если я беру любое другое окно, например виндовый калькулятор, и провожу на его пэйнтбоксом, у меня картинка bit исчезает вообще( на ней обычно черные символы на белом фоне) и остается только пэйнт бокс цвета clBtnFace, тоесть стандартного эксплоерного цвета.

При этом прога не виснет и не выдает никаких исключений(проверял). Что это может быть? Я хочу менять канву на пэйнтбоксе раз в 100 мс(точность не важна). Неужели канва не держит такую частоту рендеринга? Помогите плиз, а то я уже закалебался тестить...где в работе с канвой нужно искать тонкое место?

ЗЫ: сори, что так длинно...это ультра короткий вариант *-)
7.1K
27 октября 2005 года
miXme
44 / / 10.04.2005
Как выяснилось из не подтвержденных источников, это один из просчетов в реализации отрисовки на канве стандартных компонентов(в моем случае PaintBox). Заюзал набор Graphics32(torry.net) и все заработало на нужной (10 герц) частоте.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог