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

Ваш аккаунт

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

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

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

Как избавиться от мерцания TImage?

12K
01 октября 2006 года
MegaPixelnyi
9 / / 03.01.2006
Использую компонент TImage для отображения нескольких примитивов, которые постоянно перемещаются. При этом TImage полностью перерисовывается, что вызывает его мерцание, это довольно сильно ухудшает привлекательность моей программы. Как избавиться от мерцания?
16K
01 октября 2006 года
Black_Shem
14 / / 08.08.2006
Используй битовые образы.
Код:
var
Back, bitmap, Buf : TBitMap; // фон, картинка, буфер
BackRct : TRect; // область фона, которая должна быть
// восстановлена из буфера
BufRet: Trect; // область буфера, которая используется для
// восстановления фона
х,у:integer; // текущее положение картинки
W,H: integer; // размеры картинки
procedure TForm1.FormActivate(Sender: TObject);
 
begin
 
// создать три объекта — битовых образа
Back := TBitmap.Create; // фон
bitmap := TBitmap.Create; // картинка
Buf := TBitmap.Create; // буфер
// загрузить и вывести фон
Back.LoadFromFile('factory.bmp');
Form1.Image1.canvas.Draw(0,0,Back);
// загрузить картинку, которая будет двигаться
bitmap.LoadFromFile('aplane.bmp');
// определим "прозрачный" цвет
bitmap.Transparent := True;
bitmap.TransParentColor := bitmap.canvas.pixels[1,1];
// создать буфер для сохранения копии области фона,
// на которую накладывается картинка
W:= bitmap.Width;
Н:= bitmap.Height;
Buf.Width:= W;
Buf.Height:=H;
Buf.Palette:=Back.Palette;
// Чтобы обеспечить соответствие палитр //
Buf.Canvas.CopyMode:=cmSrcCopy;
// определим область буфера, которая
// будет использоваться
// для восстановления фона
BufRct:=Bounds(0,0,W,H);
// начальное положение картинки
х := -W; у := 20;
// определим сохраняемую область фона
BackRct:=Bounds(x,y,W,H); // и сохраним ее
Buf.Canvas.CopyRect(BufRet,Back.Canvas,BackRct);
 
end;
 
// обработка сигнала таймера
 
procedure TForm1.Timer1Timer(Sender: TObject);
 
begin
 
// восстановлением фона (из буфера) удалим рисунок
 
 
Forml.image1.canvas.Draw(x,у,Buf);
 
 
x:=x+2;
 
 
if x>fоrm1.Image1.Width then x:=-W;
 
 
// определим сохраняемую область фона
 
 
BackRct:=Bounds(x,у,W,H);
 
 
// сохраним ее копию
 
 
Buf.Canvas.CopyRect(BufRct,Back.Canvas,BackRct);
 
 
// выведем рисунок
 
 
Forml.image1.canvas.Draw(x,y,bitmap);
 
end;
 
 
// завершение работы программы
 
 
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
 
 
begin
 
 
// освободим память, выделенную
 
 
// для хранения битовых образов
 
 
Back.Free;
 
 
bitmap.Free;
 
 
Buf.Free;
 
end;
303
02 октября 2006 года
makbeth
1.0K / / 25.11.2004
Можно проще:
 
Код:
procedure TForm1.FormCreate(Sender: TObject)
type DBProp = class (TWinControl)
       public
            property DoubleBuffered;
       end;
begin
     DBProp(Image1).DoubleBuffered:=true;
end;
261
02 октября 2006 года
ahilles
1.5K / / 03.11.2005
можно со свойсвтом alphablend побаловаться
тоже помогает!!
4.9K
17 октября 2006 года
77713
43 / / 22.02.2006
Попробуй так:
 
Код:
Image1.ControlStyle:=Image1.ControlStyle + [ csOpaque ];


это поможет рисовать без мерцания...
28K
23 апреля 2007 года
AlexSoft2007
2 / / 22.04.2007
У меня тоже такая же проблема :мерцание TIMAGE :confused:
У меня Дельфи 6.

Цитата: 77713
Попробуй так:
 
Код:
Image1.ControlStyle:=Image1.ControlStyle + [ csOpaque ];


это поможет рисовать без мерцания...



Этот вариант у меня не проходит :(
Подскажите: на чем можно рисовать, чтобы не мерцало, чтобы при рисовании перерисовывалась не вся картинка, а только та часть, где я рисую?

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог