Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > Программа совмещения 2-х картинок


Автор: Катенька 17.5.2011, 22:25
На форме расположены 3 Picture и прогрессбар результат совмещения показывающий, в две из них загружаются любые картинки, в третьем результат их совмещения.Вот код


Код

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtDlgs, StdCtrls, ComCtrls, ExtCtrls, jpeg, Menus, TeeProcs,
TeEngine, Chart, DbChart;

type
TForm1 = class(TForm)
OpenPictureDialog1: TOpenPictureDialog;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TrackBar1: TTrackBar;
ProgressBar1: TProgressBar;
Button1: TButton;
Image5: TImage;
GroupBox1: TGroupBox;
Image1: TImage;
GroupBox2: TGroupBox;
Image2: TImage;
procedure Image1Click(Sender: TObject);
procedure Image2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Image3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
ugol,W:real;
implementation

{$R *.dfm}

procedure TForm1.Image1Click(Sender: TObject);
begin
OpenPictureDialog1.InitialDir:= GetCurrentDir;
if not OpenPictureDialog1.Execute
then ShowMessage('Не нашел я этот файл окоянный!!!')
else
Image1.Picture.LoadFromFile(OpenPictureDialog1.Fil eName);
end;
procedure TForm1.Image2Click(Sender: TObject);
begin
OpenPictureDialog1.InitialDir:= GetCurrentDir;
if not OpenPictureDialog1.Execute
then ShowMessage('Не нашел я этот файл окоянный!!!')
else
Image2.Picture.LoadFromFile(OpenPictureDialog1.Fil eName);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
bt:TBitmap;
i,j:Integer;
C1,C2:TColor;
r1,r2,g1,g2,b1,b2:Byte;
begin
W:=TrackBar1.Position/10;
Image5.Picture.Bitmap:=TBitmap.Create;
Image5.Picture.Bitmap.Height:=Image1.Picture.Bitma p.Height;
Image5.Picture.Bitmap.Width:= Image1.Picture.Bitmap.Width;Bt:=Image5.Picture.Bit map;
progressBar1.Max:=Bt.Height-1 ;
For j:=0 to Bt.Height-1 do begin For i:=0 to Bt.Width-1 do begin
C1:=Image1.Picture.Bitmap.Canvas.Pixels[i,j];C2:=Image2.Picture.Bitmap.Canvas.Pixels[i,j];
R1:=GetRValue(C1); G1:=GetGValue(C1); B1:=GetBValue (C1);R2:=GetRValue(C2); G2:=GetGValue(C2); B2:=GetBValue (C2);
Bt.Canvas.Pixels[i,j]:=RGB(Trunc((W*R1)+(1-W)*R2),Trunc((W*G1)+(1-W)*G2),Trunc((W*B1)+(1-W)*B2) ) ;
end;
progressBar1.Position:=j;
end;
end;
procedure TForm1.Image3Click(Sender: TObject);
begin
OpenPictureDialog1.InitialDir:= GetCurrentDir;
if not OpenPictureDialog1.Execute
then ShowMessage('Не нашел я этот файл окоянный!!!')
else
end;
end.


прокоментируйте пожалуйста что есть что и там есть лишнее-лишнее убрать.

Автор: Snowy 18.5.2011, 10:39
Неужели это работает?
Замечания:
1. Ужасное оформление кода. Совершенно нечитаем.
2. Работа через Pixels ужасно медленная.
3. Размер изображений. Код предполагает, что у обоих изображений размер одинаковый, что далеко не факт. Если второе изображение окажется меньше первого, будет сбой.
4. Не предусмотрен вариант отмены выбора изображения в диалоге.
5. Три совершенно одинаковых обработчика событий. Зачем? Достаточно одного, назначенного всем.
Ну и сам способ наложения древний и медленный, как мамонт.
Делается всё быстрее и проще: http://forum.vingrad.ru/index.php?showtopic=91526&view=findpost&p=701698

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)