Hello,
I am using following code to load Mask in ImageEnView based on what is selected by user in ImageEnMView.
Please suggest improvements.
Here is the code:
if ImageEnView1.IsEmpty then
begin
exit;
end;
ImageEnView1.LockUpdate;
if iemMasks.SelectedImage >= 0 then
begin
fName := iemMasks.ImageFileName[iemMasks.SelectedImage];
if FileExists(fName) then
begin
Screen.Cursor := crHourGlass;
LL := ImageEnView1.CurrentLayer.PosX;
LT := ImageEnView1.CurrentLayer.PosY;
LW := ImageEnView1.CurrentLayer.Width;
LH := ImageEnView1.CurrentLayer.Height;
if ImageEnView1.CurrentLayer.IsMask then
begin
idx := ImageEnView1.LayersCurrent;
MyCurrLayer := idx;
ImageEnView1.LayersAdd;
ImageEnView1.LayersMove(ImageEnView1.LayersCurrent, idx);
ImageEnView1.IO.LoadFromFile(fName);
ImageEnView1.Proc.Resample(LW + 5, LH + 5, TResampleFilter(4));
ImageEnView1.CurrentLayer.PosX := LL; // + 5;
ImageEnView1.CurrentLayer.PosY := LT; // + 5;
ImageEnView1.CurrentLayer.Width := LW;
ImageEnView1.CurrentLayer.Height := LH;
ImageEnView1.Proc.SaveUndo();
ImageEnView1.LayersRemove(idx + 1);
ImageEnView1.CurrentLayer.Visible := True;
ImageEnView1.CurrentLayer.IsMask := True;
ImageEnView1.CurrentLayer.Visible := False;
ImageEnView1.Update;
end
else // if CurrentLayer.IsMask then
begin
idx := ImageEnView1.LayersCurrent;
MyCurrLayer := idx;
idx := idx + 1;
// MainForm.ImageEnViewMain.LockUpdate;
ImageEnView1.LayersAdd;
ImageEnView1.IO.LoadFromFile(fName);
ImageEnView1.Proc.SaveUndo();
ImageEnView1.Proc.Resample(LW + 5, LH + 5, TResampleFilter(4));
ImageEnView1.CurrentLayer.PosX := LL + 5;
ImageEnView1.CurrentLayer.PosY := LT + 5;
ImageEnView1.CurrentLayer.Width := LW;
ImageEnView1.CurrentLayer.Height := LH;
ImageEnView1.Proc.SaveUndo();
ImageEnView1.LayersMove(ImageEnView1.LayersCurrent, idx);
ImageEnView1.CurrentLayer.Visible := True;
ImageEnView1.CurrentLayer.IsMask := True;
ImageEnView1.CurrentLayer.Visible := False;
Screen.Cursor := crHourGlass;
end; // if CurrentLayer.IsMask then
end
else // if FileExists(fName) then
begin
ShowMessage('Mask file not found. Cannot Open' + #13 + fName);
end; // if FileExists(fName) then
ImageEnView1.LayersCurrent := 0;
Application.ProcessMessages;
ImageEnView1.LayersCurrent := MyCurrLayer;
end; // if iemMasks.SelectedImage >= 0 then
ImageEnView1.UnLockUpdate;
ImageEnView1.Update;
It seems to work very slowly especially when there are big amount of Layers (50+ layers).
Are there any possibilities to make this code work faster?
TIA
Yogi Yang