Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.10.2012, 21:18
cybervampire cybervampire вне форума
Прохожий
 
Регистрация: 22.03.2012
Сообщения: 12
Репутация: 10
По умолчанию Фотоальбом

Доброго времени суток. Интересует такой вопрос.
Хочется сделать программу, которая будет работать как слайдшоу, но с ефектами переключения, и которая будет сохранять сразу несколько картинок в один файл. Прошу помощи, не знаю с чего начать просто.
заранее спасибо.
Ответить с цитированием
  #2  
Старый 08.10.2012, 21:19
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

TPaintBox, Canvas.ScanLine, TFileStream.
Ответить с цитированием
  #3  
Старый 10.10.2012, 10:29
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Цитата:
Сообщение от cybervampire
которая будет сохранять сразу несколько картинок в один файл.
gif, avi??
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #4  
Старый 10.10.2012, 12:57
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

mkv
_____
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #5  
Старый 10.10.2012, 14:37
cybervampire cybervampire вне форума
Прохожий
 
Регистрация: 22.03.2012
Сообщения: 12
Репутация: 10
По умолчанию

Заготовку примерно сделал. Старый исходник
в общем в программе в корневом каталоге, находит все изображения *.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  
Старый 10.10.2012, 15:00
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

самые простые эффекты это выплывание нового изображения сверху/снизу, слева/справа, мозаикой, постепенное проявление нового над старым.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #7  
Старый 10.10.2012, 15:16
cybervampire cybervampire вне форума
Прохожий
 
Регистрация: 22.03.2012
Сообщения: 12
Репутация: 10
По умолчанию

Вот я задался вопросом как это реализовать? я без понятия. читал книжки, но ничего не нашел, подходящего так сказать.
Ответить с цитированием
  #8  
Старый 10.10.2012, 15:33
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

первые 4 эффекта реализуются копированием части нового изображения на канву старого с соответствующей стороны и позиции. по таймеру происходит изменение позиции копирования и размера копируемой области. 5-ый эффект реализуется выбором случайным образом копируемой области, так же с применением таймера, 6-ой через функцию AlphaBlend (тоже по таймеру изменяя прозрачность).
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Этот пользователь сказал Спасибо NumLock за это полезное сообщение:
cybervampire (10.10.2012)
  #9  
Старый 10.10.2012, 15:52
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от cybervampire
Как реализовать еффекты, непонятно.
С канвой плохо знаком. Кто может помочь?
Посмотри лучше готовые компоненты. Например PicShow Components.
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
cybervampire (10.10.2012)
  #10  
Старый 10.10.2012, 16:14
cybervampire cybervampire вне форума
Прохожий
 
Регистрация: 22.03.2012
Сообщения: 12
Репутация: 10
По умолчанию

спасибо, буду пробовать, результат потом напишу
Ответить с цитированием
  #11  
Старый 10.10.2012, 23:20
cybervampire cybervampire вне форума
Прохожий
 
Регистрация: 22.03.2012
Сообщения: 12
Репутация: 10
По умолчанию

Просидел весь день разбирая что дак, не понял как сделать эти еффекты хоть убей.. перелопатил компонент... не совсем все понятно.
Помогите с реализацией еффектов пожалуйста.
Добавил Лист бокс. в листбокс добавляеться с текстового файла список.
К примеру:
Сверху
Снизу
Слева
Справа
...
К примеру если выбран первый елемент в списке то делать следующее
Код:
// 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 простите за дурацкие вопросы, просто плохо в это еще разбираюсь, но пытаюсь разобраться. Исходник прилагаеться
Вложения
Тип файла: rar Slideshow.rar (722.7 Кбайт, 31 просмотров)
Ответить с цитированием
  #12  
Старый 10.10.2012, 23:33
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

У тебя уже реализован таймер, просто там где "Пуск слайдов" пропиши
Код:
timer1.Enabled:=true;
, а где "Стоп слайдов" -
Код:
timer1.Enabled:=False;
Насчет эффектов-тоже решимо, нужно просто подумать как реализовать, ведь размеры изображений разные. Чтобы было меньше проблем, их нужно "подгонять" под один размер при наложении эффекта.

ЗЫ Какие именно эффекты интересуют?
Ответить с цитированием
  #13  
Старый 10.10.2012, 23:41
cybervampire cybervampire вне форума
Прохожий
 
Регистрация: 22.03.2012
Сообщения: 12
Репутация: 10
По умолчанию

Интересуют:
выход слева, справа, сверху, снизу, мозайка, жалюзи)
Ответить с цитированием
  #14  
Старый 10.10.2012, 23:51
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Цитата:
Сообщение от cybervampire
Интересуют:
выход слева, справа, сверху, снизу, мозайка, жалюзи)
К сожалению, PowerPoint у меня не установлен, так что припомнить не могу, что это такое ( ). Кое-что попробую реализовать, но уже не сегодня. Завтра у меня выходной, похимичу. Кое-что сделаю обязательно (так как неоднократно уже делал )
Ответить с цитированием
  #15  
Старый 11.10.2012, 00:06
cybervampire cybervampire вне форума
Прохожий
 
Регистрация: 22.03.2012
Сообщения: 12
Репутация: 10
По умолчанию

буду весьма благодарен, просто и самому хочеться понять как это делается, чтобы в дальнейшем было чутка попроще
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:03.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter