Форум: "Основная";
Текущий архив: 2003.06.05;
Скачать: [xml.tar.bz2];
ВнизМигает bitmap!!! Что делать? Найти похожие ветки
← →
super_alex (2003-05-26 13:09) [0]В цикле рисую на TImage
Делаю через Canvas.Pixel[x,y]:=clRed;
Далее при отрисовке каждой точки делаю TImage.Update;
Но картинка вся мигает!!!
Что делать с этим? Кто подскажет?
← →
Skier (2003-05-26 13:12) [1]>super_alex © (26.05.03 13:09)
> Делаю через Canvas.Pixel[x,y]:=clRed;
Это вообче очень медленный подход - рисуй в память, а потом
отображай...
← →
super_alex (2003-05-26 13:16) [2]Вообщето мне надо в реальном времени рисовать...
А как это в память рисовать? Не подскажешь? Кинь кодик, плиз...
P.S.
Я программер не очень сильный, только начинающий...
← →
Skier (2003-05-26 13:20) [3]>super_alex © (26.05.03 13:16)
> Вообщето мне надо в реальном времени рисовать...
А зачем при отрисовке каждой точки Update делаешь ?
← →
Skier (2003-05-26 13:22) [4]>super_alex © (26.05.03 13:16)
И лучше TPaintBox использовать...
← →
super_alex (2003-05-26 13:24) [5]Если более точно, то рисуется прямоугольник. Рисуется он линиями - слева направо, снизу вверх (попиксельно). Вот после каждой линии делаю Update. А иначе получается что всё отобразиться только после того как получиьтся весь прямоугольник.
P.S.
Весь гемор потому что цвет каждой точки вычисляется отдельно...
← →
super_alex (2003-05-26 13:32) [6]А чем TPaintBox лучше TImage?
← →
AlexSV (2003-05-26 13:36) [7]Замени TImage.Update на Application.ProcessMessages
← →
super_alex (2003-05-26 13:45) [8]Всё-равно мигает...
← →
Skier (2003-05-26 13:46) [9]>super_alex
> . А иначе получается что всё отобразиться только после того
> как получиьтся весь прямоугольник.
Что-то ты не так делаешь...
MoveTo используешь ?
← →
super_alex (2003-05-26 13:50) [10]Нет...?
Я же рисую точками, причём тут MoveTo?
← →
AlexSV (2003-05-26 13:50) [11]Приведи код процедуры
← →
Skier (2003-05-26 13:51) [12]Код
← →
super_alex (2003-05-26 14:02) [13]TransformF - тот самый TImage!!!
for i:=0 to Ширина прямоугольника do
begin
for k:=0 to Высота прямоугольника do
begin
<..//Определение цвета точки - transform.f[k]..>
TransformF.Canvas.Pixels[i,TransformF.Height-k]:=RGB(transform.f[k]);
end;
end;
TransformF.Update;
← →
super_alex (2003-05-26 14:03) [14]Ошибся!!
Update - внутри первого цикла!!!
← →
Intell (2003-05-26 14:06) [15]Form1.DoubleBuffered:=True;
← →
super_alex (2003-05-26 14:08) [16]Form1.DoubleBuffered:=True;
Это где добавлять?
Если при Create формы, то пробовал - не помогает!!!
← →
Kaban (2003-05-26 14:25) [17]и будет мигать
предлагаю вариант:
создаешь bitmap
рисуешь только на нем
создаешь таймер с маленьким интервалом, допустим 30
в таймере bitmap отрисовываешь на image
← →
super_alex (2003-05-26 14:27) [18]А можешь встроить своё предложение в мой код, которой выше?
← →
AlexSV (2003-05-26 14:42) [19]Предлагаю начать с этого кода:
for i:=0 to Ширина прямоугольника do
begin
for k:=0 to Высота прямоугольника do
begin
TransformF.Canvas.Pixels[i, TransformF.Height-k] := RGB(0, i, k);
end;
Application.ProcessMessages;
end;
Если моргание исчезнет, то поэтапно добавлять нужные фрагменты кода.
← →
VMcL (2003-05-26 14:50) [20]>super_alex © (26.05.03 13:09)
Используй DirectDraw®
← →
super_alex (2003-05-26 14:56) [21]Application.ProcessMessages; - НЕ ПОМОГАЕТ!!!
← →
AlexSV (2003-05-26 15:06) [22]Проверил приведенный код. Работает на ура (с Update в том числе).
Может у тебя еще что-то, но по приведенному фрагменту это не видно.
← →
super_alex (2003-05-26 15:09) [23]В смысле не мигает что ли?
Я пробовал - то что мигает в D6, не мигает в D3!
← →
Intell (2003-05-26 17:36) [24]Кстати, если Image лежит на TPanel, то нужно написать код так:
procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.panel1.DoubleBuffered:=True;
end;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.06.05;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.01 c