Показать сообщение отдельно
  #10  
Старый 28.11.2006, 12:08
Аватар для 4kusNick
4kusNick 4kusNick вне форума
Местный
 
Регистрация: 06.09.2006
Адрес: Россия, Санкт-Петербург
Сообщения: 444
Репутация: 550
Стрелка

Господин Sandro, большая просьба, прежде, чем задавать вопросы, внимательно ознакомьтесь хотябы с помощью Delphi.

Код:
procedure ShowPicture( path: string );
var
  bm: TBitmap; // это присваиваем тип 
  p: PPoint; //присваиваем тип =) PPoint-Pointner на Point,ссылка на точку
  l: TList ;//присваиваем переменной l тип TList (список)
  i, j: integer;
begin
  bm := TBitmap.Create;
  bm.LoadFromFile( path );
  l := TList.Create; //это то же, что и TBitmap.Create; - создание экземпляра класса TList
//это задание цикла for .. to .. do
//в нашем случае, это значит, что действия, 
//стоящие после do будут повторятся от bm.Width раз
//т.е. столко раз, сколько пикселей в ширину картинка в bm
//причем с каждым новымциклом,переменная i будет принимать 
//значение на одно больше, чем предыдущее, и в итоге, за весь
//цикл,переменная i примет значенияот 0 до bm.Width включительно
//далее следует вложенный цикл, который повторяется bm.Height раз
//то есть за один проход верхнего цикла будет выполняться 
//полностью весь нижний.
//это позволит перебрать все пиксели в изображении:
//наш воображаемый курсор перебора пикселей будет двигаться так:
//сначала пройдет сверху вниз по нулевому столбцу,затем передвинется
//на один столбец правее и снова пройдет егосверху донизу и т.д.
  for i := 0 to bm.Width do 
    for j := 0 to bm.Height do
begin
New( p );
p^.X := i; //что означает символ ^ читай в хэлпе, понятней будет,а вообще - это указатель
p^.Y := j;
l.Add( p );//это добавление в спиок l элемента p
end;

Randomize;
while l.Count > 0 do
begin
i := Random( l.Count );
p := l[i];
//это прямое копирование пикселей 
//канваса(читай про него в хэлпе) изображения в канвас формы
Form1.Canvas.Pixels[p^.X,p^.Y] := bm.Canvas.Pixels[p^.X,p^.Y];
l.Delete( i );//удаление из списка l элемента номер i (про i писал выше)
//про это читай в хэлпе и вообще не 
//рекоменую этим пользоваться,глючная штука
//в двух словах - это, чтобы твоя прога не 
//подвисала во время длительных операций
Application.ProcessMessages; 
Form1.Caption := IntToStr( l.Count );//текст в заголовке формы = количеству элементов в списке l
end;

l.Free;
bm.FreeImage; //освобождение памяти!
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
ShowPicture( OpenDialog1.FileName );
end;

__________________
THE CRACKER IS OUT THERE
Ответить с цитированием