Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.02.2012, 15:29   #1
digital-stream
Пользователь
 
Регистрация: 03.05.2011
Сообщений: 81
По умолчанию мерцание Image

double buffered := true не помогает все время мерцает кто знает как избавиться
вот исходники

Код:
begin
Dec(YPos);
if (YPos = -1) and (FRght) then
begin
FRght := false;
end;
if YPos < 0 then
begin
YPos := 0;
Dec(XPos);
if XPos + XWidth >= 0 then XPos2 := XPos + XWidth
else begin
XPos2 := XPos - 1;
XPos := XPos2 + XWidth;
end;
end;

img.Canvas.FillRect(ClientRect);
  img.Canvas.TextOut(XPos, YPos, FCaption);
  img.Canvas.TextOut(XPos2, YPos, FCaption);

Последний раз редактировалось Stilet; 28.02.2012 в 15:56.
digital-stream вне форума Ответить с цитированием
Старый 28.02.2012, 15:57   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
img.Canvas.FillRect(ClientRect);
Скорее всего мерцание из-за этого. избавься от перерисовки всей области и мерцать не будет.
А затирать то что нарисовал можно выводя это опять но цветом фона. После меняешь координаты и выводишь новое.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.02.2012, 16:05   #3
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Во-первых, DoubleBuffered предназначен для оконных контролов.
Во-вторых, DoubleBuffered влияет только на рисование в цикле прорисовки (WM_PAINT/BeginPaint/EndPaint).
В-третьих, есть подозрение, что мерцание получается потому, что ты на выходном изображении рисуешь частями. Хотя ты не показал, откуда ты вызываешь этот код.

Обычное решение - использование двойной буферизации. Сначала изображение рисуется на внеэкранном растре, а затем, когда всё готово - одной операцией переносится на экран. Мерцания нет, т.к. поверх старого изображения накладывается новое за один проход.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 28.02.2012, 16:15   #4
digital-stream
Пользователь
 
Регистрация: 03.05.2011
Сообщений: 81
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Скорее всего мерцание из-за этого. избавься от перерисовки всей области и мерцать не будет.
А затирать то что нарисовал можно выводя это опять но цветом фона. После меняешь координаты и выводишь новое.
Нет не помогла стала еще хуже )
digital-stream вне форума Ответить с цитированием
Старый 28.02.2012, 16:19   #5
digital-stream
Пользователь
 
Регистрация: 03.05.2011
Сообщений: 81
Радость

Цитата:
Сообщение от GunSmoker Посмотреть сообщение
Во-первых, DoubleBuffered предназначен для оконных контролов.
Во-вторых, DoubleBuffered влияет только на рисование в цикле прорисовки (WM_PAINT/BeginPaint/EndPaint).
В-третьих, есть подозрение, что мерцание получается потому, что ты на выходном изображении рисуешь частями. Хотя ты не показал, откуда ты вызываешь этот код.

Обычное решение - использование двойной буферизации. Сначала изображение рисуется на внеэкранном растре, а затем, когда всё готово - одной операцией переносится на экран. Мерцания нет, т.к. поверх старого изображения накладывается новое за один проход.
слушай ты такой умный что я не фига не понял короче img на котором я рисую находиться поверх другого Image еще на Img Trancperent стоит значение True если можешь сказать как все это исправит напиши пожалуйста по подробней
digital-stream вне форума Ответить с цитированием
Старый 28.02.2012, 16:26   #6
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
как все это исправит
Не рисовать на Image.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 28.02.2012, 17:17   #7
sqr
Пользователь
 
Аватар для sqr
 
Регистрация: 26.10.2011
Сообщений: 49
По умолчанию

а ты double buffered включил во время создания формы?
Everybody lies.
sqr вне форума Ответить с цитированием
Старый 28.02.2012, 17:26   #8
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

Цитата:
Сообщение от digital-stream Посмотреть сообщение
слушай ты такой умный что я не фига не понял короче img на котором я рисую находиться поверх другого Image еще на Img Trancperent стоит значение True если можешь сказать как все это исправит напиши пожалуйста по подробней
Мои чувствительные к запятым глазаааа!!!111 **собирает глаза**
Резюмирую сказанное:
Код:
private
  Buffer : tbitmap;
...
Procedure formcreate(sender : tobject);
begin
  buffer := tbitmap.create;
  buffer.width := нужная_ширина; // поглядеть значения у Вашего image 
  buffer.height := нужная_высота;
  buffer.transparent := true;
  buffer.transparentcolor := clwhite;
end;
Procedure formdestroy(sender : tobject);
begin
  buffer.free;
end;
...
некий код где у вас происходит отрисовка
всё где написано img.canvas заменить на buffer.canvas
а в конце добавить canvas.draw(Хкоордината, Укоордината, Buffer);//координаты тоже можно поглядеть в image , это будут left для Х и top для У
phomm вне форума Ответить с цитированием
Старый 28.02.2012, 21:23   #9
digital-stream
Пользователь
 
Регистрация: 03.05.2011
Сообщений: 81
По умолчанию

Цитата:
Сообщение от phomm Посмотреть сообщение
Мои чувствительные к запятым глазаааа!!!111 **собирает глаза**
Резюмирую сказанное:
Код:
private
  Buffer : tbitmap;
...
Procedure formcreate(sender : tobject);
begin
  buffer := tbitmap.create;
  buffer.width := нужная_ширина; // поглядеть значения у Вашего image 
  buffer.height := нужная_высота;
  buffer.transparent := true;
  buffer.transparentcolor := clwhite;
end;
Procedure formdestroy(sender : tobject);
begin
  buffer.free;
end;
...
некий код где у вас происходит отрисовка
всё где написано img.canvas заменить на buffer.canvas
а в конце добавить canvas.draw(Хкоордината, Укоордината, Buffer);//координаты тоже можно поглядеть в image , это будут left для Х и top для У
У меня все Замазался!!!
digital-stream вне форума Ответить с цитированием
Старый 28.02.2012, 21:25   #10
digital-stream
Пользователь
 
Регистрация: 03.05.2011
Сообщений: 81
По умолчанию

Цитата:
Сообщение от sqr Посмотреть сообщение
а ты double buffered включил во время создания формы?
Да пробовал
digital-stream вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
мерцание Image digital-stream Общие вопросы Delphi 5 02.02.2012 21:01
Как убрать мерцание при изменении яркости в Image werrey Мультимедиа в Delphi 6 23.10.2011 13:26
Мерцание при перетаскивание Image Harikolo Мультимедиа в Delphi 3 17.02.2011 00:16
Мерцание Image, который находится на TabSheet artemavd Общие вопросы Delphi 2 13.12.2010 10:31
Мерцание Image Жека-старший Компоненты Delphi 4 23.05.2010 19:36