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

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

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.06.2011, 13:38   #1
A-IX-2
Форумчанин
 
Аватар для A-IX-2
 
Регистрация: 08.10.2010
Сообщений: 101
По умолчанию Закрашивание Image по пикселям.

Всем доброго времени суток!
У меня такой вопрос: Image по пикселям закрашивается очень медленно, как можно сделать быстрее?

Код:
Function ToColor(r: real): TColor;
  var
    b: byte;
begin
  b:=255-round(255*r);
  result:=RGB(255,b,0);
end;

procedure TForm1.Timer1Timer(Sender: TObject);

  var
    _p:real;
    i,j: integer;

begin

  for I := 0 to h do
  for j := 0 to image1.Height do
  begin
    _p:=p[i];
    Pixels[h-i,j]:=ToColor(_p);
  end;

  h:=h+1;

  if h>Image1.Width then Timer1.Enabled:=False;

end;
Вложения
Тип файла: rar Программа.rar (8.1 Кб, 31 просмотров)
"Думаешь, будет трудно? Конечно, будет! Но, только закаляя дух, людьми становятся люди!"

Последний раз редактировалось A-IX-2; 05.06.2011 в 15:05.
A-IX-2 вне форума Ответить с цитированием
Старый 05.06.2011, 13:53   #2
_Engine_
Форумчанин
 
Регистрация: 29.06.2008
Сообщений: 603
По умолчанию

например, через ScanLine
_Engine_ вне форума Ответить с цитированием
Старый 05.06.2011, 13:59   #3
cargo29
Форумчанин
 
Регистрация: 13.12.2010
Сообщений: 603
По умолчанию

Надо задавать какое то уровнение тогда будет быстрее например рисование гиперболы или параболы (геометрия)
cargo29 вне форума Ответить с цитированием
Старый 05.06.2011, 14:16   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А помоему лучще будет создавать в памяти канву, ее закрашивать а потом функциями типа CopyRect или подобными все скопом переносить на видимую канву.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.06.2011, 14:32   #5
A-IX-2
Форумчанин
 
Аватар для A-IX-2
 
Регистрация: 08.10.2010
Сообщений: 101
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А помоему лучще будет создавать в памяти канву, ее закрашивать а потом функциями типа CopyRect или подобными все скопом переносить на видимую канву.
Можно подробней, как это реализовать? Или ссылку на что-нибудь почитать по этому поводу)
А то я что-то не пойму, что значить создать в памяти канву) Я так понимаю, добавить ещё один Image и сделать у него Visible в False и на этом Image рисовать не прокатит?
"Думаешь, будет трудно? Конечно, будет! Но, только закаляя дух, людьми становятся люди!"
A-IX-2 вне форума Ответить с цитированием
Старый 05.06.2011, 14:51   #6
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Вообще-то можно в run-time создать обьект TCanvas и с ним работать. После использования FREE. Думаю об этом тебе и говорит Stilet.
Человек_Борща вне форума Ответить с цитированием
Старый 05.06.2011, 17:10   #7
ZvEr_HaCkEr
VisualC++/DirectX
Форумчанин
 
Аватар для ZvEr_HaCkEr
 
Регистрация: 16.07.2010
Сообщений: 831
По умолчанию

http://www.delphisources.ru/pages/fa...xelformat.html
ZvEr_HaCkEr вне форума Ответить с цитированием
Старый 05.06.2011, 19:56   #8
A-IX-2
Форумчанин
 
Аватар для A-IX-2
 
Регистрация: 08.10.2010
Сообщений: 101
По умолчанию

Сделал по аналогии вот с этим http://delphiworld.narod.ru/base/fast_draw_graphic.html
Но после того, как примерно половина Image закрашивается всё равно немного начинает притормаживать. Это как-нибудь можно исправить? И еще, не пойму, что вот это значит PARGB = ^ARGB? Точнее для чего символ этот ^?

Код:
var
  btm: TBitMap;

type
  TRGB = record
  b,g,r: byte;
end;
  ARGB = array[0..1] of TRGB;
  PARGB = ^ARGB;

procedure TForm1.FormCreate(Sender: TObject);
begin
  btm := TBitMap.Create;
  btm.pixelformat := pf24bit;
  btm.width := Clientwidth;
  btm.height := Clientheight;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
  var
    _p: PARGB;
    i,j: integer;
begin
  for I := 0 to h do
  for j := 0 to image1.Height do
  begin
    _p:=btm.scanline[j];
    _p[h-i].r:=255;
    _p[h-i].g:=255-round(p[i]*255);
    _p[h-i].b:=0;
  end;

  h:=h+1;
  Image1.Canvas.Draw(0,0,btm);
  if h>Image1.Width then Timer1.Enabled:=False;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  btm.Free;
end;
Вложения
Тип файла: rar Программа2.rar (8.1 Кб, 17 просмотров)
"Думаешь, будет трудно? Конечно, будет! Но, только закаляя дух, людьми становятся люди!"

Последний раз редактировалось A-IX-2; 05.06.2011 в 20:01.
A-IX-2 вне форума Ответить с цитированием
Старый 05.06.2011, 21:50   #9
_Engine_
Форумчанин
 
Регистрация: 29.06.2008
Сообщений: 603
По умолчанию

Цитата:
Сообщение от A-IX-2 Посмотреть сообщение
Точнее для чего символ этот ^?
Батенька, да Вам для начала азы надо выучить. Вы бы хоть почитали что-нибудь
_Engine_ вне форума Ответить с цитированием
Старый 05.06.2011, 22:18   #10
A-IX-2
Форумчанин
 
Аватар для A-IX-2
 
Регистрация: 08.10.2010
Сообщений: 101
По умолчанию

Цитата:
Сообщение от _Engine_ Посмотреть сообщение
Батенька, да Вам для начала азы надо выучить. Вы бы хоть почитали что-нибудь
Я читал что-нибудь. С подобным нигде не сталкивался. Гугл не помог. Ценю Ваш совет, но вопроса он, к сожалению, не решает. Я бы был Вам больше благодарен, если бы Вы дали ссылку на это самое почитать что-нибудь по этой теме.
"Думаешь, будет трудно? Конечно, будет! Но, только закаляя дух, людьми становятся люди!"

Последний раз редактировалось A-IX-2; 05.06.2011 в 22:38.
A-IX-2 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как разобрать картинку по пикселям? Probapera Microsoft Office Excel 7 29.10.2010 16:04
Регион по пикселям картинки. Alex Cones Общие вопросы Delphi 0 18.09.2010 14:45
Закрашивание SlaYeR_DD Помощь студентам 2 10.06.2010 12:43
Как нарисовать линию по пикселям DenLab Общие вопросы Delphi 4 03.12.2008 09:34