Форум: "Основная";
Текущий архив: 2003.05.26;
Скачать: [xml.tar.bz2];
ВнизСоздание мноэжества 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.01 c