unit ads_BitmapCombine; {
} interface Uses Windows, Graphics; //***************************** Function BitmapCombineHoriz( BitmapLeft : TBitmap; BitmapRight : TBitmap; BitmapNew : TBitmap ): Boolean; OverLoad; Function BitmapCombineHoriz( BitmapFileLeft : String; BitmapFileRight : String; BitmapFileNew : String ): Boolean; OverLoad; Function BitmapCombineHoriz( BitmapFileLeft : String; BitmapFileRight : String; BitmapRightLeft : Integer; BitmapFileNew : String ): Boolean; OverLoad; Function BitmapCombineHoriz( BitmapLeft : TBitmap; BitmapRight : TBitmap; BitmapRightLeft : Integer; BitmapNew : TBitmap ): Boolean; OverLoad; //***************************** Function BitmapCombineVert( BitmapTop : TBitmap; BitmapBottom : TBitmap; BitmapNew : TBitmap ): Boolean; OverLoad; Function BitmapCombineVert( BitmapTop : TBitmap; BitmapBottom : TBitmap; BitmapBottomTop : Integer; BitmapNew : TBitmap ): Boolean; OverLoad; Function BitmapCombineVert( BitmapFileTop : String; BitmapFileBottom: String; BitmapBottomTop : Integer; BitmapFileNew : String ): Boolean; OverLoad; Function BitmapCombineVert( BitmapFileTop : String; BitmapFileBottom: String; BitmapFileNew : String ): Boolean; OverLoad; //***************************** Function BitmapCombine( BackgroundColor : TColor; BitmapBack : TBitmap; BitmapBackRect : TRect; BitmapFront : TBitmap; BitmapFrontRect : TRect; BitmapNewHeight : Integer; BitmapNewWidth : Integer; BitmapOut : TBitmap ): Boolean; implementation Uses ads_BitmapResize, Types, SysUtils; Function BitmapCombine( BackgroundColor : TColor; BitmapBack : TBitmap; BitmapBackRect : TRect; BitmapFront : TBitmap; BitmapFrontRect : TRect; BitmapNewHeight : Integer; BitmapNewWidth : Integer; BitmapOut : TBitmap ): Boolean; Var BitmapNew : TBitmap; BitmapNewRect : TRect; BitmapBK : TBitmap; BitmapFT : TBitmap; NewHeight : Integer; NewWidth : Integer; boRetValBK : Boolean; boRetValFT : Boolean; Begin Result := False; If BitmapBack = nil Then Exit; If BitmapFront = nil Then Exit; Try BitmapNew := TBitmap.Create(); BitmapBK := TBitmap.Create(); BitmapFT := TBitmap.Create(); Try boRetValBK := True; BitmapBK.Assign(BitmapBack); NewHeight := BitmapBackRect.Bottom-BitmapBackRect.Top; NewWidth := BitmapBackRect.Right-BitmapBackRect.Left; If (BitmapBK.Width <> NewWidth) And (BitmapBK.Height <> NewHeight) Then Begin boRetValBK := BitmapResize( BitmapBK , //Bitmap : TBitmap; NewHeight , //NewHeight : Integer; NewWidth );//NewWidth : Integer): Boolean; Overload; End; If Not boRetValBK Then Exit; boRetValFT := True; BitmapFT.Assign(BitmapFront); NewHeight := BitmapFrontRect.Bottom-BitmapFrontRect.Top; NewWidth := BitmapFrontRect.Right-BitmapFrontRect.Left; If (BitmapFT.Width <> NewWidth) And (BitmapFT.Height <> NewHeight) Then Begin boRetValFT := BitmapResize( BitmapFT , //Bitmap : TBitmap; NewHeight , //NewHeight : Integer; NewWidth );//NewWidth : Integer): Boolean; Overload; End; If Not boRetValFT Then Exit; BitmapNewRect.Right := BitmapNewWidth-1; BitmapNewRect.Top := 0; BitmapNewRect.Left := 0; BitmapNewRect.Bottom:= BitmapNewHeight-1; BitmapNew.Width := BitmapNewWidth; BitmapNew.Height := BitmapNewHeight; BitmapNew.Palette:= BitmapBack.Palette; BitmapNew.Canvas.Brush.Color := BackgroundColor; BitmapNew.Canvas.FloodFill(0,0,clBlack,fsBorder); BitmapNew. Canvas. Copyrect( BitmapBackRect, BitmapBK.Canvas, Rect(0, 0, BitmapBK.Width, BitmapBK.Height)); BitmapNew. Canvas. Copyrect( BitmapFrontRect, BitmapFT.Canvas, Rect(0, 0, BitmapFT.Width, BitmapFT.Height)); BitmapOut.Width := BitmapNew.Width; BitmapOut.Height := BitmapNew.Height; BitmapOut.Palette:= BitmapNew.Palette; BitmapOut. Canvas. Copyrect( Rect(0, 0, BitmapNew.Width, BitmapNew.Height), BitmapNew.Canvas, Rect(0, 0, BitmapNew.Width, BitmapNew.Height)); Result := True; Finally BitmapNew .Free; BitmapBK .Free; BitmapFT .Free; End; Except Result := False; End; End; //***************************** Function BitmapCombineHoriz( BitmapLeft : TBitmap; BitmapRight : TBitmap; BitmapNew : TBitmap ): Boolean; OverLoad; Var BitmapRightLeft : Integer; Begin BitmapRightLeft := BitmapLeft.Width+1; Result := BitmapCombineHoriz( BitmapLeft , //BitmapLeft : TBitmap; BitmapRight , //BitmapRight : TBitmap; BitmapRightLeft , //BitmapRightLeft : Integer; BitmapNew //BitmapNew : TBitmap );//): Boolean; OverLoad; End; Function BitmapCombineHoriz( BitmapLeft : TBitmap; BitmapRight : TBitmap; BitmapRightLeft : Integer; BitmapNew : TBitmap ): Boolean; OverLoad; Var BackgroundColor : TColor; BitmapBackRect : TRect; BitmapFrontRect : TRect; BitmapNewHeight : Integer; BitmapNewWidth : Integer; Begin BackgroundColor := clWhite; BitmapBackRect := Rect(0,0,BitmapLeft.Width,BitmapLeft.Height); BitmapFrontRect := Rect(BitmapRightLeft,0,BitmapRightLeft+BitmapRight.Width,BitmapRight.Height); If BitmapLeft.Height >= BitmapRight.Height Then Begin BitmapNewHeight := BitmapLeft.Height; End Else Begin BitmapNewHeight := BitmapRight.Height; End; BitmapNewWidth := BitmapRightLeft+BitmapRight.Width; Result := BitmapCombine( BackgroundColor , //BackgroundColor : TColor; BitmapLeft , //BitmapBack : TBitmap; BitmapBackRect , //BitmapBackRect : TRect; BitmapRight , //BitmapFront : TBitmap; BitmapFrontRect , //BitmapFrontRect : TRect; BitmapNewHeight , //BitmapNewHeight : Integer; BitmapNewWidth , //BitmapNewWidth : Integer; BitmapNew //BitmapOut : TBitmap );//): Boolean; End; Function BitmapCombineHoriz( BitmapFileLeft : String; BitmapFileRight : String; BitmapRightLeft : Integer; BitmapFileNew : String ): Boolean; OverLoad; Var BitmapLeft : TBitmap; BitmapRight : TBitmap; BitmapNew : TBitmap; Begin Result := False; If Not FileExists(BitmapFileLeft) Then Exit; If Not FileExists(BitmapFileRight) Then Exit; BitmapLeft := TBitmap.Create(); BitmapRight := TBitmap.Create(); BitmapNew := TBitmap.Create(); Try BitmapLeft.LoadFromFile(BitmapFileLeft); BitmapRight.LoadFromFile(BitmapFileRight); Result := BitmapCombineHoriz( BitmapLeft , //BitmapLeft : TBitmap; BitmapRight , //BitmapRight : TBitmap; BitmapRightLeft , //BitmapRightLeft : Integer; BitmapNew //BitmapNew : TBitmap );//): Boolean; OverLoad; If Result Then Begin Try If FileExists(BitmapFileNew) Then DeleteFile(BitmapFileNew); BitmapNew.SaveToFile(BitmapFileNew); Except Result := False; End; End; Finally BitmapLeft .Free; BitmapRight .Free; BitmapNew .Free; End; End; Function BitmapCombineHoriz( BitmapFileLeft : String; BitmapFileRight : String; BitmapFileNew : String ): Boolean; OverLoad; Var BitmapRightLeft : Integer; BitmapLeft : TBitmap; Begin Result := False; If Not FileExists(BitmapFileLeft) Then Exit; If Not FileExists(BitmapFileRight) Then Exit; BitmapLeft := TBitmap.Create(); Try BitmapLeft.LoadFromFile(BitmapFileLeft); BitmapRightLeft := BitmapLeft.Width; Finally BitmapLeft.Free; End; Result := BitmapCombineHoriz( BitmapFileLeft , //BitmapFileLeft : String; BitmapFileRight , //BitmapFileRight : String; BitmapRightLeft , //BitmapRightLeft : Integer; BitmapFileNew //BitmapFileNew : String );//): Boolean; OverLoad; End; //***************************** Function BitmapCombineVert( BitmapTop : TBitmap; BitmapBottom : TBitmap; BitmapNew : TBitmap ): Boolean; OverLoad; Var BitmapBottomTop : Integer; Begin BitmapBottomTop := BitmapTop.Height+1; Result := BitmapCombineVert( BitmapTop , //BitmapLeft : TBitmap; BitmapBottom , //BitmapRight : TBitmap; BitmapBottomTop , //BitmapRightLeft : Integer; BitmapNew //BitmapNew : TBitmap );//): Boolean; OverLoad; End; Function BitmapCombineVert( BitmapTop : TBitmap; BitmapBottom : TBitmap; BitmapBottomTop : Integer; BitmapNew : TBitmap ): Boolean; OverLoad; Var BackgroundColor : TColor; BitmapBackRect : TRect; BitmapFrontRect : TRect; BitmapNewHeight : Integer; BitmapNewWidth : Integer; Begin BackgroundColor := clWhite; BitmapBackRect := Rect(0,0,BitmapTop.Width,BitmapTop.Height); BitmapFrontRect := Rect(0,BitmapBottomTop,BitmapBottom.Width,BitmapBottomTop+BitmapBottom.Height); If BitmapTop.Width >= BitmapBottom.Width Then Begin BitmapNewWidth := BitmapTop.Width; End Else Begin BitmapNewWidth := BitmapBottom.Width; End; BitmapNewHeight := BitmapBottomTop+BitmapBottom.Height; Result := BitmapCombine( BackgroundColor , //BackgroundColor : TColor; BitmapTop , //BitmapBack : TBitmap; BitmapBackRect , //BitmapBackRect : TRect; BitmapBottom , //BitmapFront : TBitmap; BitmapFrontRect , //BitmapFrontRect : TRect; BitmapNewHeight , //BitmapNewHeight : Integer; BitmapNewWidth , //BitmapNewWidth : Integer; BitmapNew //BitmapOut : TBitmap );//): Boolean; End; Function BitmapCombineVert( BitmapFileTop : String; BitmapFileBottom: String; BitmapBottomTop : Integer; BitmapFileNew : String ): Boolean; OverLoad; Var BitmapTop : TBitmap; BitmapBottom : TBitmap; BitmapNew : TBitmap; Begin Result := False; If Not FileExists(BitmapFileTop) Then Exit; If Not FileExists(BitmapFileBottom) Then Exit; BitmapTop := TBitmap.Create(); BitmapBottom := TBitmap.Create(); BitmapNew := TBitmap.Create(); Try BitmapTop .LoadFromFile(BitmapFileTop); BitmapBottom.LoadFromFile(BitmapFileBottom); Result := BitmapCombineVert( BitmapTop , //BitmapLeft : TBitmap; BitmapBottom , //BitmapRight : TBitmap; BitmapBottomTop , //BitmapRightLeft : Integer; BitmapNew //BitmapNew : TBitmap );//): Boolean; OverLoad; If Result Then Begin Try If FileExists(BitmapFileNew) Then DeleteFile(BitmapFileNew); BitmapNew.SaveToFile(BitmapFileNew); Except Result := False; End; End; Finally BitmapTop .Free; BitmapBottom .Free; BitmapNew .Free; End; End; Function BitmapCombineVert( BitmapFileTop : String; BitmapFileBottom: String; BitmapFileNew : String ): Boolean; OverLoad; Var BitmapBottomTop : Integer; BitmapTop : TBitmap; Begin Result := False; If Not FileExists(BitmapFileTop) Then Exit; If Not FileExists(BitmapFileBottom) Then Exit; BitmapTop := TBitmap.Create(); Try BitmapTop.LoadFromFile(BitmapFileTop); BitmapBottomTop := BitmapTop.Height; Finally BitmapTop.Free; End; Result := BitmapCombineVert( BitmapFileTop , //BitmapFileLeft : String; BitmapFileBottom, //BitmapFileRight : String; BitmapBottomTop , //BitmapRightLeft : Integer; BitmapFileNew //BitmapFileNew : String );//): Boolean; OverLoad; End; end. //