Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Max Размеры TImage.Bitmap.Width &&


Автор: Sharl 11.1.2005, 20:41
Начинаю увеличивать размер TImage.Bitmap -а.

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

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


Автор: Snowy 12.1.2005, 10:56
Код

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 бит), или ......
Отсюда вопрос: Что имелось ввиду под "размером изображения"? И когда происходит ошибка? При назначении размеров битмапа или при изменении размеров изображения в нем?

Автор: Sharl 12.1.2005, 12:46
"размером изображения" - это

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


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

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



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

Автор: Sharl 12.1.2005, 14:29
А что означает глубина цвета картинки ???

Это BITMAPINFOHEADER.biBitCount ?


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

Автор: Sharl 12.1.2005, 16:16
Ok.
Snowy, Спасибо. smile
smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)