Declaration
procedure LayersMerge(IncludeBackground: Boolean = False); overload;
procedure LayersMerge(Layer1, Layer2: integer; RemoveUpperLayer: Boolean = true); overload;
procedure LayersMerge(LayerList: array of integer); overload;
procedure LayersMerge(LayerList: TIEArrayOfInteger); overload;
Description
Merges two or more layers into one layer. The new layer has the lesser index.
The new layer will inherit the
Layers.
Transparency and the bitmap's alpha channels.
The LayersMerge() overload (without parameters) will merge selected layers. If IncludeBackground = True, the selected layers will be merged with layer 0 (i.e. merged to background).
Parameter | Description |
Layer1 | Index of the first layer to merge |
Layer2 | Index of the second layer to merge |
RemoveUpperLayer | If RemoveUpperLayer is false, the upper layer will not be removed |
LayerList | An array of layer indexes to remove. The array must be ordered and all layers will be merged into the layer specified by the first index. Empty list means "all layers" |
Note:
◼To merge a layer with its own mask (to create a layer with the transparency of the mask) pass only two indexes (i.e. the indexes of the layer and the mask).
◼If any of the layers are not a
TIEImageLayer, they will be
converted to a TIEImageLayer◼LayersMergeFilter will specify the quality of image layers, if they do not have a custom
UseResampleFilter◼When passing an integer array, ensure the numbers are ordered upward, e.g. [3, 5, 9]
Masks and Merging
To merge a layer with its own
mask (i.e. to create a layer with the transparency of the mask) pass only two indexes (i.e. the indexes of the layer and the mask).
When merging, all layers - except for masks - are merged into the first layer. If the first layer has a mask it is not merged, it is maintained as a mask for all merge layers.
For example, if you are merging two layers, each with an associated layer mask, the bottom layer, and upper layer with its mask will be merged. The mask of the bottom layer will remain untouched.
If you intend to create a single merged layer without a mask (i.e. to maintain the overall appearance) then merge the first layer with its mask, before the overall merge.
// Merge layer 1 with background (layer 0)
ImageEnView1.LayersMerge( [0, 1] );
// Merge layers 0, 1 and 2
ImageEnView1.LayersMerge([ 0, 1, 2 ]);
// Merge all layers
ImageEnView1.LayersMerge([]);
// Merge all selected layers
ImageEnView1.LayersMerge();
// Merge all selected layers to background
ImageEnView1.LayersMerge( True );
// Merge layer 1 with its mask
ImageEnView1.LayersMerge( 1, 2 );
// we want to get a background image and then merge over it another image in semi-transparency.
ImageEnView.IO.LoadFromFile('C:\background.jpg');
ImageEnView.LayersAdd();
ImageEnView.IO.LoadFromFile('C:\foreground.jpg');
ImageEnView.Layers[1].Transparency := 128; // the second layer has 50% transparency
ImageEnView.LayersMerge(0, 1); // from now we have only one layer
ImageEnView.IO.SaveToFile('C:\output.jpg');
// Merge all layers with tag value of 1
var
selLayers: array of Integer;
I: Integer;
begin
for I := 1 to ImageEnView1.LayersCount - 1 do
if ImageEnView1.Layers[I].Tag = 1 then
begin
SetLength(selLayers, Length(selLayers) + 1);
selLayers[Length(selLayers) - 1] := I;
end;
if Length(selLayers) > 0 then
ImageEnView1.LayersMerge( selLayers );
end;
// Merge all selected line layers with the background image
var
selLayers: array of Integer;
i: Integer;
begin
for i := 0 to ImageEnView1.LayersCount - 1 do
if ( i = 0 ) or ( ImageEnView1.Layers[i].Selected and (ImageEnView1.Layers[i].Kind = ielkLine)) then
begin
SetLength(selLayers, Length(selLayers) + 1);
selLayers[Length(selLayers) - 1] := i;
end;
if Length(selLayers) = 1 then
ShowMessage( 'You have not selected any line layers' )
else
ImageEnView1.LayersMerge( selLayers );
end;
See Also
◼LayersMergeAll◼LayersMergeFilter◼LayersMergeTo◼IELayersMerge◼LayersSaveMergedTo