Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.10.16;
Скачать: CL | DM;

Вниз

Проблема с отрисовкой Image.   Найти похожие ветки 

 
Алекс   (2008-07-27 23:16) [0]

Здравствуйте, возник такой вопрос:
В программе есть процедура, котрая рандомно в поле Image должна расставлять определенное кол-во точек.
Проблема заключается в том, что после выполнения процедуры форма остается совершенно чистой.
На форме находится только компоненты Image и Button, по нажатию кнопки выполняется процедура.
Возможно здесь надо использовать другой компонент(не Image), впервые сталкиваюсь с графикой, поэтому не знаю.
Материалов по работе с этим компонентом не нашел, а OnPaint использовать не выгодно, т.к. столкнемся с проблемой перерисовки формы в случае ее перекрытия.  
Заранее благодарен за ответ.

Заголовок:
procedure Randpix(var Image:TImage; typcard:Char; Numb:integer; cm:integer);

Код процедуры:

procedure Randpix;
var
rndX,rndY,i,col:integer;
size:integer;

Function N(Numb:integer):integer;
begin
if numb=1 then n:=8
else n:=N(numb-1)*2;
end;

Procedure pix(x,y,size:integer); //отрисовка точки
begin
Image.Canvas.MoveTo(x,y);
Image.Canvas.Pen.Width:=size;
Image.Canvas.LineTo(x,y);
end;

begin
randomize;
col:=n(numb);
if ((typcard="A") or (typcard="C")) then
 begin
  size:=round(cm/10);
 end
else
begin
 size:=round(cm/10*2);
end;
For i:=1 to col do
begin
rndX:=random(Image.Width-size)+round(size/2);
rndY:=random(Image.Height-size)+round(size/2);
pix(rndX,rndY,size);
end;
end;


 
{RASkov} ©   (2008-07-28 00:36) [1]

> [0] Алекс   (27.07.08 23:16)
> Проблема заключается в том, что после выполнения процедуры
> форма остается совершенно чистой.

Проблема в твоем алгоритме, разбирать который я не стал....

Можешь убедится, что с рисованием все в порядке вот так:
procedure Randpix(Image: TImage);
var N: Integer;
begin
 for N:=0 to 10 do begin
  Image.Canvas.MoveTo(Random(Image.Width), Random(Image.Height));
  Image.Canvas.LineTo(Random(Image.Width), Random(Image.Height));
 end;
end;


Вызов: Randpix(Image1);

Изучай свои расчеты внутри своей процедуры.....


 
{RASkov} ©   (2008-07-28 00:38) [2]

Черт....

> Procedure pix(x,y,size:integer); //отрисовка точки
> begin
> Image.Canvas.MoveTo(x,y);
> Image.Canvas.Pen.Width:=size;
> Image.Canvas.LineTo(x,y);
> end;

Интересная отрисовка точки :)


 
{RASkov} ©   (2008-07-28 00:49) [3]

Попробуй вместо [2] сделать нечто так:
Procedure pix(x,y,size:integer); //отрисовка точки
begin
 Image.canvas.ellipse(x-size div 2, y-size div 2, x+size div 2, y+size div 2);
end;

а перед циклом вызовов pix поместить такую строчку:
image.Canvas.Brush.Color:=Image.Canvas.Pen.Color;


 
{RASkov} ©   (2008-07-28 00:57) [4]

> Randpix

> pix

Может лучше:
RandPoint
Point

или
RandSpot
Spot

? :)
А то как-то на "пискел" (с) это не похоже


 
Алекс   (2008-07-28 01:02) [5]

RASkov, да, действительно линии рисует. Последний вариант не помог, все чисто. Буду мониторить расчеты.


 
Алекс   (2008-07-28 01:03) [6]

Не ) Точка - это условное название :)) Диаметр будет 1-2 мм, поэтому таким образом и рисую :D


 
{RASkov} ©   (2008-07-28 01:04) [7]

> [5] Алекс   (28.07.08 01:02)

покажи строку вызова.... т.е. с какими параметрами вызываешь Randpix из [0]


 
Алекс   (2008-07-28 01:07) [8]

Randpix(Image1,"A",3,cm);
cm - кол-во пикселей на 1 см, в моем случае 36.


 
{RASkov} ©   (2008-07-28 01:10) [9]

> [8] Алекс   (28.07.08 01:07)

procedure Randpix(var Image:TImage; typcard:Char; Numb:integer; cm:integer);
var
rndX,rndY,i,col:integer;
size:integer;

Function N(Numb:integer):integer;
begin
if numb=1 then n:=8
else n:=N(numb-1)*2;
end;

Procedure pix(x,y,size:integer); //отрисовка точки
begin
 Image.Canvas.Ellipse(x-size div 2, y-size div 2, x+size div 2, y+size div 2);
end;

begin
randomize;
col:=n(numb);
if ((typcard="A") or (typcard="C")) then
begin
 size:=round(cm/10);
end
else
begin
size:=round(cm/10*2);
end;
image.Canvas.Brush.Color:=Image.Canvas.Pen.Color;
For i:=1 to col do
begin
rndX:=random(Image.Width-size)+round(size/2);
rndY:=random(Image.Height-size)+round(size/2);
pix(rndX,rndY,size);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Randpix(Image1, "A", 3, 36);
end;

За твое форматирование, сорри :)


 
Алекс ©   (2008-07-28 01:12) [10]

Сейчас попробую :)


 
Алекс ©   (2008-07-28 01:14) [11]

Брр, так ничего не поменялось же окромя способа рисования точки :) Блин ) Уже торможу


 
Алекс ©   (2008-07-28 01:15) [12]

а, не ) Спасибо огромное ))) Косяк увидел.. В вызове процедуры он был.



Страницы: 1 вся ветка

Текущий архив: 2011.10.16;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.006 c
15-1308503421
alexdn
2011-06-19 21:10
2011.10.16
9-й эксплорер


2-1307957801
Jamix
2011-06-13 13:36
2011.10.16
KDTele Tools


4-1251292381
Bora
2009-08-26 17:13
2011.10.16
Перехват событий от мыши в любом месте экрана


2-1308682465
antonn
2011-06-21 22:54
2011.10.16
Сменить ресурс в EXE


2-1308917313
Maxim-us
2011-06-24 16:08
2011.10.16
Непонятки с TChart