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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Max Размеры TImage.Bitmap.Width &&, TImage.Bitmap.Heigth 
:(
    Опции темы
Sharl
Дата 11.1.2005, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Начинаю увеличивать размер TImage.Bitmap -а.

С какого-то (большого ~30000) значения размеров происходит срыв ( выдается Exeption с сообщением о нехватке места хранения) - что вполне логично.

Кто-нибудь в курсе, как можно опросить систему о значении ограничения размеров TImage.Bitmap-а ? ...
И вообще, есть ли такие константы?


PM MAIL   Вверх
Snowy
Дата 12.1.2005, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Код

typedef struct tagBITMAPINFOHEADER{ // bmih  
  DWORD  biSize; // размер битмапы - dword
  LONG   biWidth; // длина, ширина Long
  LONG   biHeight;
  WORD   biPlanes;
  WORD   biBitCount
  DWORD  biCompression;
  DWORD  biSizeImage;
  LONG   biXPelsPerMeter;
  LONG   biYPelsPerMeter;
  DWORD  biClrUsed;
  DWORD  biClrImportant;
} BITMAPINFOHEADER;

Это значит, что мы можем загрузить до 4-х гигабайт.
Как раз хватит на картинку 32768х32768 пихелей (32 бита), или 46341х46341 (16 бит), или 65536х65536 (8 бит), или ......
Отсюда вопрос: Что имелось ввиду под "размером изображения"? И когда происходит ошибка? При назначении размеров битмапа или при изменении размеров изображения в нем?

Это сообщение отредактировал(а) Snowy - 12.1.2005, 10:58
PM MAIL   Вверх
Sharl
Дата 12.1.2005, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



"размером изображения" - это

Image.Bitmap.Width и Image.Bitmap.Heigth
(или Image.Width и Image.Heigth)


а ошыбка выдается , когда увеличиваю

Image.Bitmap.Width и Image.Bitmap.Heigth
(или Image.Width и Image.Heigth )



PM MAIL   Вверх
Snowy
Дата 12.1.2005, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



То есть Height=Weight или необязательно? Просто ты написал, что размер ~30000. Вот и непонятно к чему эти ~30000 относятся.
Ну, как я писал выше, если картинка у тебя 32 бита, то выше разрешения 32768х32768 пихелей не прыгнешь. Ограничение винды. Любой. И зависит не от системы, а от разрешения и глубины цвета.
Вобщем максимум, который ты можешь запихать в TBitmap (и прочие родственные вещи):
(Height * Width) * bits div 8 <= 4294967296 //(4Gb)
где bits - глубина цвета картинки.

Это сообщение отредактировал(а) Snowy - 12.1.2005, 13:51
PM MAIL   Вверх
Sharl
Дата 12.1.2005, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А что означает глубина цвета картинки ???

Это BITMAPINFOHEADER.biBitCount ?


PM MAIL   Вверх
Snowy
Дата 12.1.2005, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Ну получить доступ к этой структуре будет затруднительно. Delphi ее использует, т.к. это структура виндов, но доступа к ней не дает. Использует только для отрисовки. А сам TBitmap может дать информацию, но в несколько неудобном виде.
Почитай про Tbitmap.TPixelFormat
Очень неудобно, но другого спозоба я не знаю. Могет он где-то и есть, но я не в курсе.
Кроме того есть у меня такое подозрение, что на экран оно будет рисоваться не с битностью рисунка, а в зависимости от разрешения рабочего стола. Но это только предположение.
Просто прими битность за 32 по уолчанию и не заморачивайся.
Упрощаем:
(Height * Width) * 4 <= 4294967296 //(4Gb)

Это сообщение отредактировал(а) Snowy - 12.1.2005, 15:21
PM MAIL   Вверх
Sharl
Дата 12.1.2005, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ok.
Snowy, Спасибо. smile
smile

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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