Форум: "Media";
Текущий архив: 2011.10.16;
Скачать: [xml.tar.bz2];
ВнизПроблема с отрисовкой 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 вся ветка
Форум: "Media";
Текущий архив: 2011.10.16;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.003 c