7 мая 2012 г.

Смешивание двух фотографий.


Смешаем две фотографии в одну.

Сделаем микс из двух фоток,просто выбираем две фотографии и жмем кнопку получаем результат смешанных фото.



Возьмем вот эти две фотки:



А вот результат:



Правда фото выбрал не удачные, но бывает по разному и разные эффекты получаются, порядок выбора фото играет роль!!! и так вы можете добавить этот код в каркас фотошопа а можете сделать отдельную программу. Просто скопируйте текст каждого модуля и сохраните под этими же именами.

Имеем три модуля  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

uses MyGraph, Unit2;

{$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 или что вам хочется
Думаю ничего не забыл,должно работать теперь,пробуйте
.

Комментариев нет:

Отправить комментарий