Смешаем две фотографии в одну.
Сделаем микс из двух фоток,просто выбираем две фотографии и жмем кнопку получаем результат смешанных фото.
Возьмем вот эти две фотки:
А вот результат:
Правда фото выбрал не удачные, но бывает по разному и разные эффекты получаются, порядок выбора фото играет роль!!! и так вы можете добавить этот код в каркас фотошопа а можете сделать отдельную программу. Просто скопируйте текст каждого модуля и сохраните под этими же именами.
Имеем три модуля MyGraph,Unit1,Unit2
-----------------------------------------------------------------------------
unit MyGraph;
interface
uses Graphics;
procedure MixBMP(BM1, BM2: TBitMap; var BM: TBitMap);
implementation
procedure MixBMP(BM1, BM2: TBitMap; var BM: TBitMap);
var
I, J: Integer;
MinW, MinH: Integer;
begin
BM := TBitMap.Create;
if BM1.Width < BM2.Width then
MinW := BM1.Width
else
MinW := BM2.Width;
if BM1.Height < BM2.Height then
MinH := BM1.Height
else
MinH := BM2.Height;
BM.Width := MinW;
BM.Height := MinH;
for I := 0 to MinW do
for J := 0 to MinH do
if (Odd(I) and Odd(J)) or ((not (Odd(I))) and (not (Odd(J)))) then
BM.Canvas.Pixels[I, J] := BM1.Canvas.Pixels[I, J]
else
BM.Canvas.Pixels[I, J] := BM2.Canvas.Pixels[I, J];
end;
begin
end.
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtDlgs, Buttons, StdCtrls,jpeg;
type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
Edit1: TEdit;
SpeedButton1: TSpeedButton;
OpenPictureDialog1: TOpenPictureDialog;
SpeedButton2: TSpeedButton;
Edit2: TEdit;
SpeedButton3: TSpeedButton;
SpeedButton4: TSpeedButton;
procedure SpeedButton1Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
procedure SpeedButton3Click(Sender: TObject);
procedure SpeedButton4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{$R data1.res}
var mix:tbitmap;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
if not openpicturedialog1.Execute then exit
else edit1.Text:=openpicturedialog1.FileName;
end;
procedure TForm1.SpeedButton2Click(Sender: TObject);
var b,b2:tbitmap; j,j2:tjpegimage;
begin
b:=graphics.TBitmap.Create;
b2:=graphics.tbitmap.Create;
mix:=graphics.tbitmap.Create;
j:=jpeg.TJPEGImage.Create;
j2:=jpeg.TJPEGImage.Create;
j.LoadFromFile(edit1.Text);
j2.LoadFromFile(edit2.Text);
j.DIBNeeded;
j2.DIBNeeded;
b.Assign(j);
b2.Assign(j2);
MixBMP(b,b2,mix);
form2.Image1.Width:=j.Width;
form2.Image1.Height:=j.Height;
form2.BorderStyle:=bsnone;
form2.Left:=0;
form2.Top:=0;
form2.Image1.Canvas.Draw(0,0,unit1.mix);
form2.show;
mix.Free;
b.Free;
b2.Free;
j.Free;
j2.Free;
end;
procedure TForm1.SpeedButton3Click(Sender: TObject);
begin
if not openpicturedialog1.Execute then exit
else edit2.Text:=openpicturedialog1.FileName;
end;
procedure TForm1.SpeedButton4Click(Sender: TObject);
begin
close;
end;
end.
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, ExtDlgs, Menus;
type
TForm2 = class(TForm)
Image1: TImage;
PopupMenu1: TPopupMenu;
SavePhoto1: TMenuItem;
SavePictureDialog1: TSavePictureDialog;
Exit1: TMenuItem;
procedure SavePhoto1Click(Sender: TObject);
procedure Exit1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.SavePhoto1Click(Sender: TObject);
begin
if not savepicturedialog1.Execute then exit
else
image1.Picture.SaveToFile(savepicturedialog1.FileName);
end;
procedure TForm2.Exit1Click(Sender: TObject);
begin
form2.Close;
end;
end.
--------------------------------------------------------------------------
Потом создадите проект в делфи и тут уж ваше дело повторяйте дизайн мой или свой, необходимо добавить только компонент OpenPictureDialog он находится на странице палитры компонентов Dialogs он необходим для открытия фото,можно использовать и OpenDialog кому как нравится.
Поправочка во втором модуле необходимо добавить еше одну форму кроме главной конечно,на нее ложим Image и устанавливаем Align=AlClient добавляем контекстное меню popupmenu вот так:
В инспекторе объектов в свойство Caption пишем Save photo или что вам хочется
Думаю ничего не забыл,должно работать теперь,пробуйте
Поправочка во втором модуле необходимо добавить еше одну форму кроме главной конечно,на нее ложим Image и устанавливаем Align=AlClient добавляем контекстное меню popupmenu вот так:
В инспекторе объектов в свойство Caption пишем Save photo или что вам хочется
Думаю ничего не забыл,должно работать теперь,пробуйте
Комментариев нет:
Отправить комментарий