|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Помогите, пожайлуста!
Задано изображение в .bmp формате, которое сохранено в фале.
Отобразить на экране это изображение путем случайного вибору точок из исходного файла и перенести их на экран из задержкой каждого пикселя или группы пикселей. Предусмотреть предохранение повторных переносов. |
#2
|
||||
|
||||
Примерно так:
Код:
procedure TForm1.Button1Click(Sender: TObject); var bm: TBitmap; p: PPoint; l: TList; i, j: integer; begin bm := TBitmap.Create; bm.LoadFromFile( 'c:\windows\пузыри.bmp' ); l := TList.Create; 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 ); 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 ); Application.ProcessMessages; Sleep( 1 ); Caption := IntToStr( l.Count ); end; l.Free; bm.FreeImage; end; |
#3
|
|||
|
|||
Decoding, что то не работает!!! Хотя наверно у мя руки не оттуда выросли! Можеш подробнее написать что куда и как!!! Зараннен большая блогодарность!!! )))
|
#4
|
||||
|
||||
Вот пример - primer.zip
|
#5
|
|||
|
|||
как сделать чтобы картинка быстрее открывалпсь??
как сделать чтобы картинка быстрее открывалпсь???
|
#6
|
||||
|
||||
1) УБЕРИ SLEEP
2) Доступ к пикселям через Canvas.Pixels очень медленный. Постарайся избавиться от этого (используй ScanLine). У меня получилось избавиться только от одного Canvas.Pixels - bm.Canvas.Pixels[p^.X,p^.Y]. Прежде, чем спросить, как это сделать, постарайся сам найти ответ. |
#7
|
|||
|
|||
Хорошо, большое спасибо!!! Тогда такой вопрос: можно ли выводить на канву не по одному пикселю, а группой(несколько пикселей)????? Если можна подскажите как?
|
#8
|
|||
|
|||
Decoding, и еще маленькая просьба Вы не моглиб рассказать общий принцып работы этой программы :
procedure ShowPicture( path: string ); var bm: TBitmap; // это присваиваем тип p: PPoint; //что это? l: TList ;//что это? i, j: integer; begin bm := TBitmap.Create; bm.LoadFromFile( path ); l := TList.Create; //что это? for i := 0 to bm.Width do //что это? for j := 0 to bm.Height do //что это? begin New( p ); p^.X := i; //что означают эти p^.X "^" p^.Y := j; l.Add( 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 );//что это? Application.ProcessMessages; //что это? Form1.Caption := IntToStr( l.Count );//что это? end; l.Free; bm.FreeImage; //освобождение памяти! end; procedure TForm1.Button1Click(Sender: TObject); begin if OpenDialog1.Execute then ShowPicture( OpenDialog1.FileName ); end; |
#9
|
|||
|
|||
Пожайлуста помогите, кто может что то знает, я то я не пойму что-то! Заранее спасибо!!! :-)))
|
#10
|
||||
|
||||
Господин 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 |