Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с большим количеством рисунков 
:(
    Опции темы
Нитонисе
Дата 19.3.2010, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Ситуация такая.

На форме есть панель, где отображается некий рисунок (созданный заранее и сохраненный в формате bmp).
База возможных рисунков - велика. Всегда отображается только один из них, в зависимости от установки соответствующего показателя. Например в комбобоксе 100 итемов, выбрали 1 - получили на панели рисунок 1, выбрали 54 итем - на панели отобразился рисунок соответствующий этой позиции.
Пока что я решаю эту проблему помещением каждого рисунка в свой Image. При выборе из комбобокса определенного итема, нужный Image ставлю в visible=true, все остальные рисунки - visible=false. 
Метод неудобный, учитывая большое количество рисунков. 
Как бы это дело оптимизировать?
Неплохо было бы создать файл ресурсов и загружать оттуда картинки всего в один Image в зависимости от выбранного итема в комбобоксе. Но в Image из файла ресурсов картинки не грузятся. Только через задание объекта Graphics::TBitmap и копирование с канвы на канву. 
Можно ли как-то подругому организовать вывод картинки из множества?

Смежный вопрос.
Надо распечатать содержимое панели, где у меня выводится рисунок. Сейчас я смотрю, какой из Image имеет visible=true - тот и печатаю. Получается довольно объемистый код, что неудобно. Жалко что панель не имеет канвы, тогда можно было бы печатать ее содержимое...
Как можно проще организовать выяснение того, какой именно рисунок в данный момент прорисован на моей панели?
PM MAIL   Вверх
borisbn
Дата 19.3.2010, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 18
Всего: 135



Зачем отображать на панели, если для этого есть TPicture, у которого есть TPicture::LoadFromFile
ИМХО каждый раз подгружать нужный рисунок из файла более универсально, т.к. их можно будет менять "на лету" без пересборки ресурсов


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Нитонисе
Дата 19.3.2010, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(borisbn @  19.3.2010,  19:55 Найти цитируемый пост)
Зачем отображать на панели, если для этого есть TPicture, у которого есть TPicture::LoadFromFile

Так у меня на панели лежат Image, а у них тоже такой метод есть. Только при этом все файлы рисунков должны находиться на жестком диске. А хотелось бы чтобы все было скомпоновано в один exe файл.
PM MAIL   Вверх
borisbn
Дата 20.3.2010, 08:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 18
Всего: 135



тогда можешь попробовать запихнуть все рисунки в TImageList и затем вызывать TImageList::Draw или TImageList::GetBitmap
но, всё-таки по-моему лучше держать рисунки отдельно от exe-шника. think about it smile


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Нитонисе
Дата 20.3.2010, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(borisbn @  20.3.2010,  08:47 Найти цитируемый пост)
тогда можешь попробовать запихнуть все рисунки в TImageList и затем вызывать TImageList::Draw или TImageList::GetBitmap

Так это по-моему то же самое что запихнуть их в файл ресурсов, разместить на панели всего один Image и на его канву копировать битмап из файла ресурсов соответствующий выбранному итему из комбобокса.
Цитата(borisbn @  20.3.2010,  08:47 Найти цитируемый пост)
но, всё-таки по-моему лучше держать рисунки отдельно от exe-шника. think about it 

И чем это лучше?
PM MAIL   Вверх
borisbn
Дата 20.3.2010, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 18
Всего: 135



Цитата(Нитонисе @  20.3.2010,  11:25 Найти цитируемый пост)
Так это по-моему то же самое что запихнуть их в файл ресурсов

абсолютно то же самое. просто TImageList - удобная обёртка к ресурсам. Рисунки можно добавлять визуально.

Цитата(Нитонисе @  20.3.2010,  11:25 Найти цитируемый пост)
И чем это лучше?

ну, я не знаю задачи, но, например, можно сделать разные темы (skeen'ы), выбирая тот или иной каталог с рисунками. Темы могут пополняться силами пользователя.
Если ничего этого не нужно, то IMHO TImageList - оптимальное решение.




--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
vikaz
Дата 20.3.2010, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 869
Регистрация: 15.2.2006

Репутация: 10
Всего: 12



Цитата(Нитонисе @  20.3.2010,  13:25 Найти цитируемый пост)
И чем это лучше? 

Хм, я то думал это очевидно.....
1. Рисунки можно менять в любое время;
2. При смене рисунка не нужно перекомпилировать проект;
3. Exe файл содержит только код, что уменьшает его объем в разы;
4. Прогамма будет запускаться намного быстрее.



Цитата(borisbn @  20.3.2010,  10:47 Найти цитируемый пост)
тогда можешь попробовать запихнуть все рисунки в TImageList и затем вызывать TImageList::Draw или TImageList::GetBitmap

Это только при условии, что все картинки имеют одинаковый размер. Если они отличаются, то ImageList будет подгонять картинки под размер заданный в свойствах компоненты


Цитата(borisbn @  19.3.2010,  21:55 Найти цитируемый пост)
Зачем отображать на панели, если для этого есть TPicture, у которого есть TPicture::LoadFromFile

Одно из здравых решений! Тем более, что из описания я понял, что Вам нужно отображать только один файл из множества. Если так, то задача решается очень просто и быстро!


--------------------
user posted image

Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ 
PM MAIL ICQ Skype   Вверх
Нитонисе
Дата 20.3.2010, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(vikaz @  20.3.2010,  11:42 Найти цитируемый пост)
Одно из здравых решений! Тем более, что из описания я понял, что Вам нужно отображать только один файл из множества. Если так, то задача решается очень просто и быстро!

А чем TPicture отличается от TImage? Мне не хочется иметь отдельную папку с рисунками. Все они для внутреннего пользования программы и не предполагается их изменение пользователями. То есть большой набор нужных для работы картинок. Если их хранить в отдельных файлах и вдруг какой-то из них потеряется - программа работать не будет. Потому лучше пусть все будет в exe.
PM MAIL   Вверх
vikaz
Дата 20.3.2010, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 869
Регистрация: 15.2.2006

Репутация: 10
Всего: 12



Цитата(Нитонисе @  20.3.2010,  14:30 Найти цитируемый пост)
А чем TPicture отличается от TImage? Мне не хочется иметь отдельную папку с рисунками. Все они для внутреннего пользования программы и не предполагается их изменение пользователями. То есть большой набор нужных для работы картинок. Если их хранить в отдельных файлах и вдруг какой-то из них потеряется - программа работать не будет. Потому лучше пусть все будет в exe. 

Тогда нужно более точно формулировать то, что Вы хотите получить! TImage наследует TPicture!


--------------------
user posted image

Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ 
PM MAIL ICQ Skype   Вверх
Нитонисе
Дата 20.3.2010, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(vikaz @  20.3.2010,  12:38 Найти цитируемый пост)
Тогда нужно более точно формулировать то, что Вы хотите получить! TImage наследует TPicture!

Формулирую.
Есть панель, где мне нужно отображать картинку. 
Возможных картинок - много (допустим сотня).
Всегда отображается только одна картинка из всех.
Какая именно картинка отображается - решается выбранным итемом из комбобокса.

Как я сейчас решаю это.
На каждую картинку у меня свой TImage (таким образом на панели лежит сотня имейджев).
При выборе итема в комбобоксе я соответсвующий имейдж делаю visible=true, а все остальные visible=false.
Код получается большой и неудобный.
PM MAIL   Вверх
vikaz
Дата 20.3.2010, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 869
Регистрация: 15.2.2006

Репутация: 10
Всего: 12



 а можно скриншот на это дело? Я просто понять не могу, зачем для внутреннего использования нужно 100 картинок да еще и с выбором определенной! Эти картинки все одного размера?


--------------------
user posted image

Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ 
PM MAIL ICQ Skype   Вверх
XPyCT
Дата 20.3.2010, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 24.8.2007
Где: Moldova

Репутация: 10
Всего: 10



Почитайте книгу С.Бобровского!
Самоучитель программирования с++ в среде Borland C++ Builder 5
А именно второй пример создание карточной игры пасьянс!
там на примере показано как работать с калодой карт из 52 + 2 шт, используя компонент ImageList 
И все ваши вопросы отпадут!

Это сообщение отредактировал(а) XPyCT - 20.3.2010, 12:59
PM MAIL Skype   Вверх
Нитонисе
Дата 20.3.2010, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(vikaz @  20.3.2010,  12:54 Найти цитируемый пост)
а можно скриншот на это дело? Я просто понять не могу, зачем для внутреннего использования нужно 100 картинок да еще и с выбором определенной! Эти картинки все одного размера?

 
user posted image

Скриншот с вариацией на эту тему.
На панели размещена картинка - это расчетная схема узла (программа вообще расчетная).
Сверху 13 кнопок - возможные типы узлов. При этом каждый узел имеет свои модификации, в зависимости от других настроек. В данном случае у каждого узла две модификации, таким образом всего возможно 26 различных расчетных схем.  И как следствие - на панели лежит 26 имейджев, в каждый из которых загружена одна из картинок.

При нажатии на кнопку программа смотрит что указывает настройка модификаций и отображает один из двух вариантов узлов, соответствующих этой кнопке.
PM MAIL   Вверх
vikaz
Дата 20.3.2010, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 869
Регистрация: 15.2.2006

Репутация: 10
Всего: 12



1. ImageList Вам в помощь ну или упаковывайте все ресурс, хотя ImageList так и делает!
2. Переведите картинки из BMP, допустим в PNG, это уменьшит их объем
 


--------------------
user posted image

Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ 
PM MAIL ICQ Skype   Вверх
Нитонисе
Дата 20.3.2010, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(vikaz @  20.3.2010,  13:46 Найти цитируемый пост)
1. ImageList Вам в помощь ну или упаковывайте все ресурс, хотя ImageList так и делает!

Так а какой мне прок от ImageList? Я бы хотел чтобы у меня на панели был всего один Image. Значит мне нужно будет в зависимости от нажатой кнопки загружать на канву этого Image картинку из ImageList? Напрямую они грузятся туда? Если через файл ресурсов, то напрямую точно не грузится.
Цитата(vikaz @  20.3.2010,  13:46 Найти цитируемый пост)
2. Переведите картинки из BMP, допустим в PNG, это уменьшит их объем

Они итак небольшие, по 11-12 Кб, PNG не пойдет, так как я использую сфойство Transparent=true, оно только у bmp файлов работает.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0899 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.