Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.007 c
1-83446
HydraMarat
2003-05-14 18:40
2003.05.26
Оригинальный TList


3-83377
gizar
2003-05-05 08:33
2003.05.26
ADOStoreProc и DBGrid


1-83482
MMF
2003-05-13 14:01
2003.05.26
проблемы с Tregistry.SaveKey


14-83713
VEG
2003-05-06 17:09
2003.05.26
Управление PDA


7-83755
Andrio
2003-03-25 14:40
2003.05.26
Штрих-код ???





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский