|
#1
|
|||
|
|||
Фотоальбом
Доброго времени суток. Интересует такой вопрос.
Хочется сделать программу, которая будет работать как слайдшоу, но с ефектами переключения, и которая будет сохранять сразу несколько картинок в один файл. Прошу помощи, не знаю с чего начать просто. заранее спасибо. |
#2
|
|||
|
|||
TPaintBox, Canvas.ScanLine, TFileStream.
|
#3
|
||||
|
||||
Цитата:
Пишу программы за еду. __________________ |
#4
|
||||
|
||||
mkv
_____ — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#5
|
|||
|
|||
Заготовку примерно сделал. Старый исходник
в общем в программе в корневом каталоге, находит все изображения *.jpg *.bmp и выдает в FileListBox смена происходит по таймеру или по нажатию клавиши. Код:
unit Unit4; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, ShellCtrls, Grids, Outline, DirOutln, ExtCtrls, StdCtrls, FileCtrl, Spin, Buttons, ToolWin, ActnMan, ActnCtrls, jpeg, Menus; type TForm4 = class(TForm) ImgPhoto: TImage; pnNavigation: TPanel; DirectoryListBox1: TDirectoryListBox; FileListBox1: TFileListBox; CheckBox1: TCheckBox; SpinEdit1: TSpinEdit; Slideshow: TCheckBox; Timer1: TTimer; Label1: TLabel; Label2: TLabel; SpeedButton1: TSpeedButton; SpeedButton2: TSpeedButton; SpeedButton3: TSpeedButton; SpeedButton4: TSpeedButton; SpeedButton5: TSpeedButton; procedure FileListBox1Change(Sender: TObject); procedure CheckBox1Click(Sender: TObject); procedure SlideshowClick(Sender: TObject); procedure SpinEdit1Change(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure FormCreate(Sender: TObject); procedure SpeedButton11Click(Sender: TObject); procedure SpeedButton1Click(Sender: TObject); procedure SpeedButton2Click(Sender: TObject); procedure SpeedButton3Click(Sender: TObject); procedure SpeedButton4Click(Sender: TObject); procedure SpeedButton5Click(Sender: TObject); private { } public { Public declarations } end; var Form4: TForm4; pathapp:string; implementation {$R *.dfm} procedure TForm4.CheckBox1Click(Sender: TObject); begin imgPhoto.Stretch:=checkbox1.Checked; end; procedure TForm4.FileListBox1Change(Sender: TObject); Var Ext:String; JP:TJPEGImage; Rect:TRect; begin Screen.Cursor:=crAppStart; Try If ((filelistbox1.FileName='') And (filelistbox1.Count<>0)) Then Begin filelistbox1.ItemIndex:=0; End; Ext:=ExtractFileExt(filelistbox1.FileName); If ((Ext='.jpg') Or (Ext='.jpeg')) Then Begin JP:=TJPEGImage.Create; JP.LoadFromFile(filelistbox1.FileName); imgPhoto.Picture.Assign(JP); JP.Free; End Else If Ext='.bmp' Then Begin imgPhoto.Picture.LoadFromFile(filelistbox1.FileName); End Else Begin Rect.Left:=0; Rect.Top:=0; Rect.Right:=imgPhoto.Width-1; Rect.Bottom:=imgPhoto.Height-1; imgPhoto.Picture.Bitmap.Width:=imgPhoto.Width; imgPhoto.Picture.Bitmap.Height:=imgPhoto.Height; imgPhoto.Picture.Bitmap.Canvas.Brush.Color:=clGray; imgPhoto.Picture.Bitmap.Canvas.Brush.Style:=bsSolid; imgPhoto.Picture.Bitmap.Canvas.FillRect(Rect); imgPhoto.Picture.Bitmap.Canvas.Refresh; End; Except // ShowMessage('Недопустимый формат файла!'); End; Screen.Cursor:=crDefault; end; procedure TForm4.FormCreate(Sender: TObject); begin pnnavigation.Visible:=false; pathapp:=getcurrentdir; Checkbox1.Checked:=false; slideshow.Checked:=false; Timer1.Enabled:=false; end; procedure TForm4.SlideshowClick(Sender: TObject); begin spinedit1Change(Self); Timer1.Enabled:=SlideShow.Checked; end; procedure TForm4.SpeedButton11Click(Sender: TObject); begin PnNavigation.Visible:=true; end; procedure TForm4.SpeedButton1Click(Sender: TObject); begin timer1.Enabled:=false; end; procedure TForm4.SpeedButton2Click(Sender: TObject); begin Slideshow.Checked:=true; end; procedure TForm4.SpeedButton3Click(Sender: TObject); begin filelistbox1.ItemIndex:=filelistbox1.ItemIndex+1; filelistbox1Change(Self); end; procedure TForm4.SpeedButton4Click(Sender: TObject); begin filelistbox1.ItemIndex:=filelistbox1.ItemIndex-1; filelistbox1Change(Self); end; procedure TForm4.SpeedButton5Click(Sender: TObject); begin if Pnnavigation.Visible=true then Pnnavigation.Visible:=false else Pnnavigation.Visible:=true; if SpeedButton5.Caption='Меню Вкл' then SpeedButton5.Caption:='Меню Выкл' else SpeedButton5.Caption:='Меню Вкл' end; procedure TForm4.SpinEdit1Change(Sender: TObject); begin Timer1.Interval:=Spinedit1.Value*1000; end; procedure TForm4.Timer1Timer(Sender: TObject); begin If (filelistbox1.ItemIndex+1<filelistbox1.Count) Then Begin filelistbox1.ItemIndex:=filelistbox1.ItemIndex+1; filelistbox1Change(Self); End Else If (filelistbox1.ItemIndex+1=filelistbox1.Count) And (filelistbox1.Count>0) Then Begin filelistbox1.ItemIndex:=0; filelistbox1Change(Self); End; end; end. С канвой плохо знаком. Кто может помочь? |
#6
|
||||
|
||||
самые простые эффекты это выплывание нового изображения сверху/снизу, слева/справа, мозаикой, постепенное проявление нового над старым.
Пишу программы за еду. __________________ |
#7
|
|||
|
|||
Вот я задался вопросом как это реализовать? я без понятия. читал книжки, но ничего не нашел, подходящего так сказать.
|
#8
|
||||
|
||||
первые 4 эффекта реализуются копированием части нового изображения на канву старого с соответствующей стороны и позиции. по таймеру происходит изменение позиции копирования и размера копируемой области. 5-ый эффект реализуется выбором случайным образом копируемой области, так же с применением таймера, 6-ой через функцию AlphaBlend (тоже по таймеру изменяя прозрачность).
Пишу программы за еду. __________________ |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
cybervampire (10.10.2012)
|
#9
|
||||
|
||||
Цитата:
|
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
cybervampire (10.10.2012)
|
#10
|
|||
|
|||
спасибо, буду пробовать, результат потом напишу
|
#11
|
|||
|
|||
Просидел весь день разбирая что дак, не понял как сделать эти еффекты хоть убей.. перелопатил компонент... не совсем все понятно.
Помогите с реализацией еффектов пожалуйста. Добавил Лист бокс. в листбокс добавляеться с текстового файла список. К примеру: Сверху Снизу Слева Справа ... К примеру если выбран первый елемент в списке то делать следующее Код:
// efflist это listbox if efflist.Enabled=true then if efflist.ItemIndex=0 then begin rect.Left:=0; rect.Top:=-100; rect.Right:=imgphoto.Width-100; rect.Bottom:=imgphoto.Height-100; imgphoto.Picture.bitmap.width:=imgphoto.Width; imgphoto.Picture.Bitmap.Height:=imgphoto.Height; imgPhoto.Picture.Bitmap.Canvas.Brush.Color:=clblack; imgPhoto.Picture.Bitmap.Canvas.Brush.Style:=bsSolid; imgPhoto.Picture.Bitmap.Canvas.FillRect(Rect); imgPhoto.Picture.Bitmap.Canvas.Refresh; end; Как еще и таймер реализовать? P/S простите за дурацкие вопросы, просто плохо в это еще разбираюсь, но пытаюсь разобраться. Исходник прилагаеться |
#12
|
||||
|
||||
У тебя уже реализован таймер, просто там где "Пуск слайдов" пропиши
Код:
timer1.Enabled:=true; Код:
timer1.Enabled:=False; ЗЫ Какие именно эффекты интересуют? |
#13
|
|||
|
|||
Интересуют:
выход слева, справа, сверху, снизу, мозайка, жалюзи) |
#14
|
||||
|
||||
Цитата:
|
#15
|
|||
|
|||
буду весьма благодарен, просто и самому хочеться понять как это делается, чтобы в дальнейшем было чутка попроще
|