You are getting outofmemory exception because you are processing files in ImageEnMView that have not been loaded yet. FillFromDirectory is threaded so you trying to process files that are not loaded.
Fixing this is simple. Just begin processing files after they all have been loaded using the OnAllDisplayed event. This event is executed when all images are loaded and displayed.
In my test all 65 of the files are processed with no exceptions:
procedure TForm1.Starttest1Click(Sender: TObject);
var
iPath: string;
begin
ImageEnMView1.Clear;
iPath := ExtractFilePath(Application.ExeName) + 'TestImages';
StatusBar1.Panels[0].Text := iPath;
ImageEnMView1.FillFromDirectory(iPath);
end;
procedure TForm1.ImageEnMView1AllDisplayed(Sender: TObject);
var
i: integer;
begin
StatusBar1.Panels[2].Text := 'Files: ' + IntToStr(ImageEnMView1.ImageCount);
for i := 0 to ImageEnMView1.ImageCount - 1 do
begin
Self.Caption := Format('Image #%d: %s', [i, ImageEnMView1.ImageFileName[i]]);
StatusBar1.Panels[1].Text := ExtractFileName(ImageEnMView1.ImageFileName[i]);
ImageEnMView1.SelectedImage := i;
ImageEnMView1.CopyToIEBitmap(i, ImageEnView1.IEBitmap);
ImageEnView1.Update;
StatusBar1.Panels[3].Text := 'File: ' + IntToStr(i+1);
Application.ProcessMessages;
end;
end;
William Miller
Email: w2m@frontiernet.net
EBook: http://www.imageen.com/ebook/
Apprehend: http://www.frontiernet.net/~w2m/index.html