![]() |
|
|
|
|
#1
|
|||
|
|||
|
Доброго времени суток. Интересует такой вопрос.
Хочется сделать программу, которая будет работать как слайдшоу, но с ефектами переключения, и которая будет сохранять сразу несколько картинок в один файл. Прошу помощи, не знаю с чего начать просто. заранее спасибо. |
|
#2
|
|||
|
|||
|
TPaintBox, Canvas.ScanLine, TFileStream.
|
|
#3
|
||||
|
||||
|
Цитата:
|
|
#4
|
||||
|
||||
|
mkv
![]() _____ |
|
#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 простите за дурацкие вопросы, просто плохо в это еще разбираюсь, но пытаюсь разобраться. Исходник прилагаеться |