![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с отрисовкой Image.
Алекс © (2008-07-27 23:16:00)Здравствуйте, возник такой вопрос:
В программе есть процедура, котрая рандомно в поле 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;
Алекс (2008-07-28 01:15:00) [1]а, не ) Спасибо огромное ))) Косяк увидел.. В вызове процедуры он был.
Алекс (2008-07-28 01:14:00) [2]Брр, так ничего не поменялось же окромя способа рисования точки :) Блин ) Уже торможу
Алекс (2008-07-28 01:12:00) [3]Сейчас попробую :)
{RASkov} (2008-07-28 01:10:00) [4]> [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:07:00) [5]
Randpix(Image1,'A',3,cm);
cm - кол-во пикселей на 1 см, в моем случае 36.
{RASkov} (2008-07-28 01:04:00) [6]> [5] Алекс (28.07.08 01:02)
покажи строку вызова.... т.е. с какими параметрами вызываешь Randpix из [0]
Алекс (2008-07-28 01:03:00) [7]Не ) Точка - это условное название :)) Диаметр будет 1-2 мм, поэтому таким образом и рисую :D
Алекс (2008-07-28 01:02:00) [8]RASkov, да, действительно линии рисует. Последний вариант не помог, все чисто. Буду мониторить расчеты.
{RASkov} (2008-07-28 00:57:00) [9]> Randpix
> pix
Может лучше:
RandPoint
Point
или
RandSpot
Spot
? :)
А то как-то на "пискел" (с) это не похоже
{RASkov} (2008-07-28 00:49:00) [10]Попробуй вместо [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:38:00) [11]Черт....
> 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:36:00) [12]> [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);
Изучай свои расчеты внутри своей процедуры.....