Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Размещение в Image больших изображений 
:(
    Опции темы
Vitaly333
Дата 6.11.2006, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



При размещении на компоненте Image больших изображений (20000X20000 и больше) выдаёт исключение что не хватает памяти. Поменял формат пикселя на pf4bit проблема ушла , но всё равно при изображениях (>30000) всё равно вылетает исключения.
Может есть другой компонент (например PaintBox или спец.) под который отведено больше памяти или может можно  изменить память , выделяемую под картинку Image?
PM MAIL   Вверх
Alexeis
Дата 6.11.2006, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



А вы посчитайте размер памяти необходимый для ее хранения. У меня вышло 1,11 Гб непрерывного адресного пространства. Фрагмент такого размера как правило отсутствует на любой машине. Просто функция new не способна выделить такой фрагмент. Советую вам копать в сторону файлов отображаемых в память. Т.е. на диске можно хоть 4Тб, но отображать в память прийдется небольшими фрагментами, по 500Мб.

Добавлено @ 19:51 
Цитата(Vitaly333 @  6.11.2006,  19:01 Найти цитируемый пост)
например PaintBox или спец.

PaintBox ничего не хранит, а только рисует на своей поверхности. Ограничение это системное, потому надо искать специфические компоненты (либо писать свои). Но в любом случае вы наткнетесь на ограничение по размерам одного буфера.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Bitter
Дата 7.11.2006, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

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



А для чего тебе хранить такой Image? Может придумаем другой способ...
PM MAIL ICQ Skype   Вверх
Vitaly333
Дата 7.11.2006, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата

А для чего тебе хранить такой Image? Может придумаем другой способ... 



Нужно рисовать и масштабировать лабиринт большого размера (2000X2000 клеток). Каждая клетка имеет размер 20X20. Т.е получается изображение  40000X40000, под которое естественно не хватает памяти. 
PM MAIL   Вверх
Snowy
Дата 7.11.2006, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Решение изначально выбрано неверно smile
Тебе не нужен такой имадж.
Тебе нужно рисовать то, что видно, а не всё и сразу да ещё разрешением в N мониторов.
PM MAIL   Вверх
Alexeis
Дата 7.11.2006, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(Vitaly333 @  7.11.2006,  17:06 Найти цитируемый пост)
Каждая клетка имеет размер 20X20. 

Тогда вообще ну нужно всего лабиринта! Любой его фрагмент можно составить из стандартных частей 20х20 просто рисовать их на канве. Как из кубиков собирать домик. Каждый раз новый для текущего экрана.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Bitter
Дата 7.11.2006, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

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



А если попробовать так:

1. Можно создать матрицу 2000х2000 типа byte (она займёт 4Мб оперативы).
2. Заполнить её след. образом: 1 - стена, 0 - нет стены.
3. Установим "камеру" (коей является экран) в точку 0,0 (т.е. х=0, у=0)
4. Если размер ячейки, как ты сказал, 20х20, то обзор камеры будет составлять 51х38 при разрешении экрана 1024х768 (w := 1024/20 = 51, h := 768/20 = 38). Если необходимо выводить не на весь экран, то обзор камеры равен: w := Width/20, h := Height/20;
5. Выводим на экран ячейки с х+0 до х+51 и с у+0 до у+38, где х,у -координаты "камеры".

Выводить можно путем блиттинга куска стены на Image:
for i := 0 to h-1 do
 for j := 0 to w-1 do
 begin
  BitBlt(Form1.Image1.Picture.Bitmap.Canvas, j*20, i*20, 20, 20, 
         Form2.Image1.Picture.Bitmap.Canvas, XSrc, YSrc, SRCCOPY);
 end;

Сдесь XSrc и YSrс - координаты куска стены в Form2.Image1. Их можно вычислить так:
XSrc := Matr[x+j,y+i]*20;  // х,у - координаты камеры в матрице
YScr := 0;

Т.е. битмап содержит элементы лабиринта, нарисованные в строку (По этому YSrc всегда равен 0) с интервалом 20 пикселей.

Это сообщение отредактировал(а) Bitter - 7.11.2006, 19:18
PM MAIL ICQ Skype   Вверх
Vitaly333
Дата 8.11.2006, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Все понял. Спасибо. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

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

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

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

FAQ раздела лежит здесь!


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

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




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


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

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