Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-34617
Феликс
2003-04-22 00:22
2003.05.12
Как вы считаете, можно ли верить заявлению Валерии?


1-34455
msoftware
2003-04-28 14:51
2003.05.12
Как загрузить из DLL дочерную MDI форму?


14-34566
Scorpx
2003-04-17 19:31
2003.05.12
Обновление сайта!!!


1-34458
NewN
2003-04-29 09:00
2003.05.12
Передача string в DLL.


1-34470
Slavok
2003-04-29 11:11
2003.05.12
WordApplication. Как конектится ещё раз в реал-тайме?





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