Модераторы: Snowy, Alexeis, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как мне правильно обновлять изменённые участки 
V
    Опции темы
Ak47black
  Дата 7.7.2007, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: нет
Всего: 0



Здравствуйте.
Подскажите пожалуйста как тут правильно сделать.
Работаю с TImage. В начале работы получаю указатель на bitmap и работаю с ним 
Код

    TImage:= TImage.Picture.Bitmap.ScanLine[TImage.Picture.Bitmap.Height-1];

Обновляю рисунок очень часто тоесть каждый 50ms.
Если я просто обновляю(bitmap) то процессора почти эта процеду не жрёт, но если я дописываю repaint чтобы видеть изменения на форме то жрёт примерно 30-40% процессора.
Вопрос - можно-ли сделать так что-бы обновлять только те участки на форме(TImage) которые я изменил (координаты мне заранее известны).
PM MAIL   Вверх
Alexeis
Дата 7.7.2007, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



Ak47black, попробуй функцию InvalidateRect(); для окна на котором находиться TImage. функция помечает изображение в указанном прямоугольнике недействительным, т.е. как будто поверх него что-то нарисовали. Если TImage умеет отрисовываться фрагментами, то это то что нужно.



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Ak47black
Дата 7.7.2007, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: нет
Всего: 0



Alexeis, попробовал но чтото нетак выходит точнее еще больше жрёт зараза, но обновляется .  smile 
Вот так я пробовал
Код

    for i:=0 to PosSize-1 do
    begin
      InvalidateRect(Form1.Handle,@PosArr[i],False);
    end;

PosSize - размер массива прямоугольников.
PosArr - массив прямоугольников.

Чтото я нето делаю.
PM MAIL   Вверх
Alexeis
Дата 7.7.2007, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



Цитата(Ak47black @  7.7.2007,  22:30 Найти цитируемый пост)
попробовал но чтото нетак выходит точнее еще больше жрёт зараза, но обновляется

  Думаю просто дело в том, что TImage не предназначен для вывода анимации и не отрисовывает изображение кусками, потому прийдется это делать руками - Canvas.copyrect в руки smile


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Ak47black
Дата 7.7.2007, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: нет
Всего: 0



Alexeis, а есть из стандартных компоненты, которые позволяют получить доступ к scanlinам и отображать участки по отдельности?
PM MAIL   Вверх
Alexeis
Дата 7.7.2007, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



  Есть. TBitmap smile


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Ak47black
Дата 8.7.2007, 01:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: нет
Всего: 0



Эмм это ты в шутку или знаешь выход.
Так ,а как мне его заюзать.
Как используя TBitmap обновлять только изменёные участки.
Мне важней всего оптимизация, и нужно выводить все изминения очень быстро.
PM MAIL   Вверх
ivan219
  Дата 8.7.2007, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 4
Всего: 12



А утебя Transparent у Image False ???
PM MAIL ICQ   Вверх
Ak47black
Дата 8.7.2007, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: нет
Всего: 0



Цитата

А утебя Transparent у Image False ???

Да я использую 24bit.

Цитата

Есть. TBitmap smile

Ну тут если с TBitmap работать то надо каждый раз получать ScanLine ,а это черевато нагрузкой на процессор.
PM MAIL   Вверх
Ak47black
Дата 8.7.2007, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: нет
Всего: 0



Может кто ответить как сделать.
У меня есть указатель на память которая хранить сканлайны изображения которое постоянно меняется, мне нужно сделать как-бы обвёртку для этой памяти что-бы можно было юзать как TBitmap. 
PM MAIL   Вверх
ivan219
  Дата 8.7.2007, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 4
Всего: 12



Цитата(Ak47black @  8.7.2007,  12:57 Найти цитируемый пост)
Да я использую 24bit.

Если Transparent включён то Image будет напрягать проц пополной выключи его и посмотри что будет.
PM MAIL ICQ   Вверх
Ak47black
Дата 8.7.2007, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: нет
Всего: 0



ivan219, мне нужно оптимизировать так что-бы почти вообще процессора не занимал.
Я нехочю всё заново прорисовывать, мне это ненужно и неэкономно.
PM MAIL   Вверх
Ak47black
Дата 8.7.2007, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: нет
Всего: 0



Чето у меня этот код не идёт.


Это сообщение отредактировал(а) Ak47black - 8.7.2007, 18:39

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  test.rar 5,90 Kb
PM MAIL   Вверх
MetalFan
Дата 8.7.2007, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 5
Всего: 128



немного поправленная с помощью молотка и лома функция (ибо не до конца разбираюсь в теме создания битмапов),
но вроде бы работает)
Код

var
  BitmapInfo: TBitmapInfo;
  MemDC: HDC;
  OutPutPointer : Pointer;
begin
  GetMem( OutPutPointer, 75);
  FillMemory( OutPutPointer, 75, 0);
  with BitmapInfo.bmiHeader do
  begin
    biSize          := sizeof(TBitmapInfoHeader);
    biWidth         := 5;
    biHeight        := 5;
    biPlanes        := 1;
    biBitCount      := 24;
    biCompression   := BI_RGB;
  end;

  MemDC := GetDC(0);
  Result := CreateDIBitmap(  MemDC,
              BitmapInfo.bmiHeader, CBM_INIT,
              OutPutPointer,
              BitmapInfo,
              DIB_RGB_COLORS);
  freemem( OutPutPointer );
end;


Это сообщение отредактировал(а) MetalFan - 8.7.2007, 23:16


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Ak47black
Дата 9.7.2007, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: нет
Всего: 0



Ок. С обверткой для битов разобрался используя выше приведенный код и поменял на CreateDIBSection.
Теперь вродебы всё есть но немогу добиться результата.
Пробовал но чтото не выходит, можете ктонибудь еше подсказать пожалуйста, для продвижения.

Значит опишу чётко что у меня есть.

Есть:
  • 1.Переменная TBitmap в котором храниться источник изображения, это изображение очень часто меняется (меняет его не моя прога, скорость смены 50ms)
  • 2.Массив изменённых участков - array of TRect
 

Цель:
Вывести на форму изображение (пользуясь 1.) которое очень часто меняется (можно сказать как-бы видео) и чтобы сильно уменьшить нагрузку на процессор используя заранее известные координаты из (2.Массив изменённых участков) выводить и обновлять только те участки которые подверглись изменению.


Пробовал:
  •  TImage и TPaintBox но чтото InvalidateRect не хочет работать с ними.
  • Через CopyRect тоже чтото не обновляет.
  • И пробовал создать какбы компонент из TWinControl но тут я не силён и ненашол Canvas. (запутался чтото если честно)


Это сообщение отредактировал(а) Ak47black - 9.7.2007, 20:37
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0594 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.