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.
//