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