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

Вниз

создание 500000 картинок..или взгляды психа на жизнь...   Найти похожие ветки 

 
Бедный   (2003-04-29 18:58) [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 сек...а нужно
1!!!!

PS. Если можно то советы присылайте на rundll32@list.ru , т.к. интернет в данное
время роскошь :(


 
Romkin ©   (2003-04-29 19:20) [1]

Псих. (с) Ежик в тумане
Ты должен создавать/прорисовывать только видимые картинки


 
Бедный   (2003-04-29 20:08) [2]

Romkin © , так они все видимые! например в spinedit1.value указано 10000 это значит что цикл создаст 10000 картинок while.bmp ... это квадратик 10*10...
У меня есть подобная прога на DELPHI и создает 500000 за одну сек...а может и не создает...а, как то выводит %)


 
STANT ©   (2003-04-29 23:54) [3]

>так они все видимые!
У меня никогда не получалось увидеть на одном эекране больше нескольких десятков картинок. А тут 100000!!!


 
PGM   (2003-04-30 00:10) [4]

Да уж выводить с помощью TImage 10000 картинок это ого-го. Не проще ли одну картинку вывести нужное число раз с помощью Canvas (на худой конец даже в тот же TImage, но большой)? Из вопроса не совсем понятно разные картинки или одинаковые. Если одинаковые, то что 666-ю удалять, что 1-ю все едино. Надо только правильно перерисовывать, да держать массив с указанием есть в этом месте картинка или нет.


 
Shirson ©   (2003-04-30 10:24) [5]

>Бедный

Тебе правильно заметили, не нужно создавать сходу массив, на 100000 TImage, нужно создавать только для ВИДИМЫХ картинок.
Если у тебя на экране одновременно помещается 1000 картинок, создай массив для 1000 картинок и покажи их. Все остальные всё равно не видимы - зачем под них отводить память? И ресурсы?
Первым шагом, определяй сколько картинок будет видно на экране единовременно.
Затем вычисляй начиная с какой они будут видны (индекс).
После чего, создавай массив для этих картинок и показывай их.

Однако, вариант вывода на канву еще лучше. Просто рисуй все ВИДИМЫЕ картинки на канве и храни массив чисел, с индексами изображений и их местоположением. Это, IMHO, наилучший вариант.


 
Vampire ©   (2003-04-30 12:16) [6]

Еще есть варианты?


 
vladislav80 ©   (2003-04-30 12:17) [7]

Если много картинок, то вывод на канву будет очень долгим, надо использовать CreateDIBSection и рисовать в памяти... А брать их с помощью GetDIBits из массива. Про массив все уже сказано :)


 
circul ©   (2003-04-30 12:19) [8]

>Vampire © (30.04.03 12:16)
А ты здесь при чем?



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

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

Наверх




Память: 0.49 MB
Время: 0.009 c
14-34590
Evgeny
2003-04-24 08:58
2003.05.12
Справочная система Delphi


6-34529
кондратий
2003-03-12 20:27
2003.05.12
Cookies, History, Temporary Internet Files


1-34510
race1
2003-04-29 13:54
2003.05.12
WindowState


14-34595
seth
2003-04-24 12:30
2003.05.12
сказка


7-34625
beginner (!)
2003-03-16 15:30
2003.05.12
PropertySheet