Witam,
potrzebuję mieć duuuuużo bitmapek. Mają dość małe rozmiary - rzędu kilkadziesiąt x kilkadziesiąt. No i pojawia się problem po utworzeniu ok 10tys. Rzucany jest EOutOfResources, czyli brak uchwytów, wina systemu.. wiem.
Jak to obejść?? Zrobiłem testowy programik i działa:
void __fastcall TForm1::Button15Click(TObject *Sender)
{
Graphics::TBitmap * bmp = new(nothrow) Graphics::TBitmap();
if(!bmp){
ShowMessage("Brak pamieci");
return;
}
bmp->PixelFormat = pf24bit;
bmp->Width = 32;
bmp->Height = 40;
bool res = true;
TImageList * timl [11];
for(int i = 0; i < 11; i++){
timl[i] = new (nothrow) TImageList(Application);
if(!timl[i]){
ShowMessage("Brak pamieci");
res = false;
break;
}
timl[i]->AllocBy = 1000;
timl[i]->Width = 32;
timl[i]->Height = 40;
}
if(res){
for(int i = 0; i < 11000; i++){
if(timl[i/1000]->Add(bmp, NULL) == -1){
ShowMessage("Brak pamieci: " + IntToStr(i));
res = false;
break;
}
pb1->StepIt();
}
}
ShowMessage(res ? "OK" : "Blad");
delete bmp;
for(int i = 0; i < 11; i++){
delete timl[i];
}
}
Ale muszę wtedy operować na ImageListach. Mam już dość duży program (ok 10 tys linii) i zmieni mi to ogromnie całą komunikację z bitmapami. Jest jakiś inny sposób?