Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.26;
Скачать: CL | DM;

Вниз

Создание мноэжества image в run-time   Найти похожие ветки 

 
Злая Маринка   (2003-05-13 19:55) [0]

Необходимо сделать нечто вроде области с прокруткой, куда можно было вставлять
небольшие изображениz, но в больших кол-вах...
Например, выбираю в настройках число 1000 и в эту область загружается
1000 картинок...к примеру файл white.bmp
Сложность заключается в том чтобы в последствии выполнения программы можно было
получить доступ к некоторым картинкам...например к 556-ой...и 660-ой...
и например удалить их...
Я думаю нужно использывать компонент ScrollBox...
Еще нужно чтобы все картинки выстраивались столбиком...
и друг за другом :(

Помогите...как такое сделать?

Делаю вот так. При созданни до 200 картинок все происходит быстро...
но при 4000 цикл просто умерает :(
А надо минимум 100000 штук!!!

Создаю каждую картику в run-time чтобы иметь к ней доступ - удалять илм
менять картинку.


var
Form1: TForm1;
qa,ass,w,vin,bin: integer;
btn : array[1..500000] of Timage;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
for qa:=0 to spinedit1.Value do begin
btn[1+w]:=Timage.Create(scrollbox1);
btn[1+w].Picture.LoadFromFile("c:\1.bmp");
btn[1+w].Height:=10;
btn[1+w].Width:=10;
btn[1+w].Parent := scrollbox1;
btn[1+w].left:=vin;
if btn[1+w].left>335 then
begin
ass:=ass+1;
btn[1+w].left:=0;
end;
btn[1+w].top:=ass*10;

vin:=btn[1+w].left+10;
w:=w+1;
end;
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
btn[5].Picture.LoadFromFile("c:\2.bmp");
btn[55].Picture.LoadFromFile("c:\2.bmp");
btn[6].Picture.LoadFromFile("c:\2.bmp");
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
w:=0;
ass:=0;
end;

end.


Все бы хорошо, но для создания 4000 картинок уходит 30 сек...а нужно 100000!


При том не зависимо можно создавать 10 раз по 200 картинок...
на 5 раз комп уже дико стонет...

Прошу совета...
Сегодня уже здать надо...


 
Переяслов Григорий ©   (2003-05-13 20:14) [1]

100000 картинок. Не круто-ли. А какого они должны быть размера, сколько бит на цвет?


 
Palladin ©   (2003-05-13 20:21) [2]

я бы рекомендовал создавать объекты не все, а только те которые видимые, не использовать для этого scollbox а использовать TPanel и TScrollBar, на событии OnScroll которого написать смену файлов с изображениями у объектов, для чего создать массив 1..10000 с именами этих файлов. куда проще и меньше ресурсов будет кушает и работать буде на ура...


 
Злая Маринка   (2003-05-13 20:23) [3]

Ну 10*10...
bmp картинка...
я не понимаю почему даже если создавать сусками по 100 штук комп в итоге умерает


 
Злая Маринка   (2003-05-13 20:26) [4]

Palladin ©
А подробней можно...у меня всего одна ночь в переди :(
не успеваю...


 
Palladin ©   (2003-05-13 20:28) [5]

да я вроде все подробно описал, чего именно не понятно?


 
Deus   (2003-05-13 20:47) [6]

А одну большую картинку нельзя пользовать, а потом в конкретное её место с одной маленькой копировать?
А html нельзя никак подключить? Или я не о том думаю?


 
Злая Маринка   (2003-05-13 21:10) [7]

Короче квадратики 10*10 (картинки) это блоки....
например задаем величину HDD и вычисляется кол-вл блоков...
если в блоке по 4кб...то можно посчитать сколько нужно блоков!
После нажатия по кнопке должно создаться столько квадритиков...и нужно иметь доступ к каждому...если например у 556ой image нужно сменить картинку,..
Есть подобная прога...все делается очень быстро :(
Может кто поможет кодом?


 
Palladin ©   (2003-05-13 21:18) [8]

проблема у тебя в подходе...
все это рисуется в ручную, а не создается толпа объектов!


 
Arch-vile ©   (2003-05-13 23:05) [9]

2Palladin
может ей разъяснить поподробнее надо было?
2Злая Маринка
Итак, разъяснение (как понял я):
1. это не огромедный массив объектов, а одна картина.
2. мы знаем параметры картинки, знаем сколько картинок в ряду, поэтому можем посчитать координаты нужной картинки в ряду огромной картины.
3. вот так и обращаемся с ней, с большой картиной и координатами маленьких картинок в ней.

Комп умирает по причине нехватки памяти. Если винда из NT"шной линии, смотреть Task Manager"ом. Если из 9х - Starter"ами всякими. Просто представь, сколько нужно памяти для такого кол-ва картинок.
Но для одной огромной тоже может понадобиться нехило ОЗУшки, поэтому логично будет сделать по совету Palladin"a "я бы рекомендовал создавать объекты не все, а только те которые видимые". В данном случае - картина на область видимости. а масенькие картинки по ней перемещать. ИМХО, может получиться быстрее, чем с созданием-убиванием. Но я в этом не уверен


 
Palladin ©   (2003-05-13 23:22) [10]

проблема в том что автор поста хочет организовать что то на подобие Norton SpeedDisk

там карта диска рисуется на DC, сами данные по диску естественно совсем в другой структуре хранятся

координаты TRect 556 региона вычисляются при помощи div и mod
и после прекрасно на них или BitBlt из легенды, или вообще в ручную TextOut...
легенда - библиотека рисунков


 
Arch-vile ©   (2003-05-13 23:29) [11]

на Norton SpeedDisk? тогда пусть посмотрит на игру AutoWar (конференция игры или KOL)


 
Думкин ©   (2003-05-14 06:43) [12]

Проблема может быть и в ином.
Если это все картинки - то это объекты ГДИ. А их много быть не может. По Фэню - в 2000 - в одном процессе - не больше 12000. В 98 - смерть прийдет раньше.



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

Текущий архив: 2003.05.26;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.02 c
14-83713
VEG
2003-05-06 17:09
2003.05.26
Управление PDA


1-83557
Злая Маринка
2003-05-13 19:55
2003.05.26
Создание мноэжества image в run-time


1-83456
vidiv
2003-05-15 02:08
2003.05.26
MemoryStream - Memory + Disk


1-83485
NetKnight
2003-05-15 14:09
2003.05.26
finfirst & findnext


14-83652
ctranik
2003-05-07 22:41
2003.05.26
У FTP есть такая команда