28.11.2006, 12:08
|
|
Местный
|
|
Регистрация: 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
|