Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
2-1309007537
Maxim-us
2011-06-25 17:12
2011.10.16
TChart style


1-1268895548
Kolan
2010-03-18 09:59
2011.10.16
Как узнать что значит Event в сообщении?


2-1309187909
ShegAI
2011-06-27 19:18
2011.10.16
StayOnTop при длительных операциях


2-1309442338
Pcrepair
2011-06-30 17:58
2011.10.16
Программа "ест" память, потом сбой


3-1265098618
Spot
2010-02-02 11:16
2011.10.16
ADO filter like





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский