Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.09.30;
Скачать: [xml.tar.bz2];

Вниз

почему ошибка при загрузке в масив большого числа битмапов?   Найти похожие ветки 

 
delphiForever   (2007-09-04 17:50) [0]

вот например код

n:=100;
for i:=0 to n do begin
arBm[i]:=TBitMap.Create;
arBm[i].LoadFromFile(IntToStr(i)+"file.bmp");
end;

в результате ошибка "Canvas not allow drawing". Практически n может быть больше или меньше, кажется вроде есть зависимость от железа.


 
Ega23 ©   (2007-09-04 17:52) [1]

А это точно bmp?
А может какой-нить альфа-канал присутствует?


 
Dib@zol ©   (2007-09-04 17:57) [2]

> [0] delphiForever   (04.09.07 17:50)

В том то и дело, что памяти не хватает. По крайней мере у меня такое выдавалось лишь по этой причине.


 
delphiForever   (2007-09-04 18:12) [3]


> В том то и дело, что памяти не хватает

а если загрузить пару файлов большого размер получиться памяти нужно в несколько раз больше чем 100 маленьких файлов, а ошибка не вылетает?
И кажется уже не помню ошибка себя покажет даже если ничего не грузить, а просто в цикле попытаться после создания битмапа изменить его размеры


arBm[i].width:=1;
arBm[i].height:=1;


 
umbra ©   (2007-09-04 18:12) [4]

а где рисование в приведенном коде?


 
delphiForever   (2007-09-04 18:14) [5]


> а где рисование в приведенном коде?

рисовать уже не успеваеш...


 
Dib@zol ©   (2007-09-04 18:15) [6]

> [3] delphiForever   (04.09.07 18:12)

Памяти не хватает не под сами битмапы, а под их хендлы в системе. потому и "доез нот аллов"...


 
delphiForever   (2007-09-04 18:19) [7]


> Памяти не хватает не под сами битмапы, а под их хендлы в
> системе. потому и "доез нот аллов"...

а разве хендл жрет много ресурсов


 
Dib@zol ©   (2007-09-04 18:21) [8]

Неа, просто в системе существует лимит хендлов.


 
delphiForever   (2007-09-04 18:25) [9]


> Неа, просто в системе существует лимит хендлов.

ну спасиба разрулил тему а то уже год спокойно спать не мог :)


 
Инс ©   (2007-09-04 18:36) [10]


> delphiForever   (04.09.07 17:50)

Вообще, телепаты из отпуска не вернулись еще, но подобная ошибка чаще всего возникает при огромном количестве gdi-объектов, как здесь
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=11868
или возможно вы обращаетесь к VCL из неосновного потока.


 
Anatoly Podgoretsky ©   (2007-09-04 19:44) [11]

> delphiForever  (04.09.2007 17:50:00)  [0]

Ошибка не здесь


 
delphiForever   (2007-09-04 19:48) [12]


> Anatoly Podgoretsky ©   (04.09.07 19:44) [11]
> Ошибка не здесь


тогда что?


 
Loginov Dmitry ©   (2007-09-04 21:14) [13]

> Ошибка не здесь


+1

100 - это далеко не лимит для битмаповских хэндлов. В Win98 лимит около 300 хэндлов на процесс. В WinXP - около 9000 на процесс. А 100 - это мелочь. Скорее всего, что-нить с потоками перемудрил...


 
delphiForever   (2007-09-04 21:38) [14]


> 100

100 ето так в переносном смысле, что бы было понятно проблему.


> В Win98 лимит около 300 хэндлов на процесс. В WinXP - около
> 9000 на процесс. А 100 - это мелочь

в принцыпе согласен в Xp работает дольше, у меня:
Win98 цыкл летел где-то на 170 кругу и выше
WinXp где-то около 600-1000


> Скорее всего, что-нить с потоками перемудрил...

потоков вообще нет новый проект, форма и громадная кнопка с кодом:
n:=100;
for i:=0 to n do begin
arBm[i]:=TBitMap.Create;
arBm[i].LoadFromFile(IntToStr(i)+"file.bmp");
end;


 
Anatoly Podgoretsky ©   (2007-09-04 21:55) [15]

> delphiForever  (04.09.2007 21:38:14)  [14]

Этот код не откомпилируется, значит это не весь код.


 
delphiForever   (2007-09-04 23:09) [16]


> Этот код не откомпилируется, значит это не весь код.

ну вот весь код, прям чудеса, проверил все без ошибок, раньше таким самим способом пытался загрузить картинки для анимации, правда поменьше и в результате получал ошибку примерно один раз с трех

var
 Form1: TForm1;
 arBm:array of TBitMap;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
 i:integer;
begin
 SetLength(arBm,0);
 for i:=0 to 7050 do begin
 SetLength(arBm,Length(arBm)+1);
 arBm[i]:=TBitMap.Create;
 arBm[i].LoadFromFile("2.bmp");
 form1.Caption:=InttoStr(i);
 form1.Canvas.Draw(0,0,arBm[i]);
 end;
end;


 
Anatoly Podgoretsky ©   (2007-09-04 23:15) [17]

О как подрасло, сразу в 70 раз.
А вот размеры битмапа остались загадкой.
Уже и рисование появилось.
И сколько памяти тратится по диспетчеру задач?
Прямо партизан какой то.


 
delphiForever   (2007-09-04 23:19) [18]


> А вот размеры битмапа остались загадкой.

85*120

> Прямо партизан какой то.

ето от дедушки



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2007.09.30;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.059 c
6-1170397167
Ural_angel
2007-02-02 09:19
2007.09.30
Socket и Stream


2-1188558769
Dib@zol
2007-08-31 15:12
2007.09.30
SetWindowRgn


15-1188638944
ElectriC
2007-09-01 13:29
2007.09.30
asm в Delphi


15-1186723331
Rouse_
2007-08-10 09:22
2007.09.30
Update 2 to C++Builder 2007 and Delphi 2007 for Win32


4-1175360086
Vovka
2007-03-31 20:54
2007.09.30
Пропадающий курсор





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский