Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4   вперед  Ctrl      все
 Re: Картинки больше 2ГБ  [new]
Sapersky
Member

Откуда:
Сообщений: 83
Flying-home,

Забудьте про DDB (CreateCompatibleBitmap), в современных виндах от них никакой пользы нет.
DIB 25000*25000 в 64-битном режиме создаётся, но работает ли рисование - не пробовал.
b := TBitmap.Create;
b.PixelFormat := pf24Bit;
b.SetSize(25000, 25000);
Вообще лучше искать библиотеку, которая может выделять память под битмап через GetMem. Graphics32 вроде так умеет, и даже через MMF:
https://graphics32.github.io/Docs/Additional Topics/Back-Ends.htm
но рисовать придётся только средствами самой библиотеки.
При загрузке tiff могут быть проблемы, если загрузка не нативная, а скажем через GDI+, то опять же всё пойдёт через виндовые битмапы.
22 фев 21, 23:04    [22284958]     Ответить | Цитировать Сообщить модератору
 Re: Картинки больше 2ГБ  [new]
Flying-home
Member

Откуда: kart.vrostove.net
Сообщений: 15000
Sapersky
Забудьте про DDB (CreateCompatibleBitmap), в современных виндах от них никакой пользы нет.

Так она вызывается в SetSize!
SetSize - CopyImage - CopyBitmap - Result := GDICheck(CreateCompatibleBitmap(ScreenDC, bmWidth, bmHeight))
22 фев 21, 23:18    [22284963]     Ответить | Цитировать Сообщить модератору
 Re: Картинки больше 2ГБ  [new]
rgreat
Member

Откуда:
Сообщений: 6582
Flying-home
Да не, специально скачал свежую (относительно) Дельфу

Только в дельфи коммюнити могут сказать "свежая" про версию среды аж 8-летней давности.

Работу с 4+ GB потоками давным давно уже поправили.

А XE3 это всего 2-я версия среды с поддержкой x64.

Сообщение было отредактировано: 22 фев 21, 23:16
22 фев 21, 23:22    [22284966]     Ответить | Цитировать Сообщить модератору
 Re: Картинки больше 2ГБ  [new]
Sapersky
Member

Откуда:
Сообщений: 83
Flying-home,

Если PixelFormat задан конкретный (не pfDevice по умолчанию), то должен создаваться DIB через CreateDIBSection.
Заглянул в потроха - так и есть, CreateDIBSection в CopyBitmap.
22 фев 21, 23:24    [22284968]     Ответить | Цитировать Сообщить модератору
 Re: Картинки больше 2ГБ  [new]
Flying-home
Member

Откуда: kart.vrostove.net
Сообщений: 15000
rgreat
Flying-home
Да не, специально скачал свежую (относительно) Дельфу

Только в дельфи коммюнити могут сказать "свежая" про версию среды аж 8-летней давности.

Работу с 4+ GB потоками давным давно уже поправили.

А XE3 это всего 2-я версия среды с поддержкой x64.

Я до этого писал в BDS 2006, мне хватало. Тут захотелось много памяти, спросил пацанов в соседнем топике, что ставить. Посоветовали XE3, сказали, за глаза хватит.
А тут, оказывается, не все так просто. И TStream с шестой версии не переписывался.
22 фев 21, 23:34    [22284972]     Ответить | Цитировать Сообщить модератору
 Re: Картинки больше 2ГБ  [new]
Flying-home
Member

Откуда: kart.vrostove.net
Сообщений: 15000
Sapersky
Flying-home,

Если PixelFormat задан конкретный (не pfDevice по умолчанию), то должен создаваться DIB через CreateDIBSection.
Заглянул в потроха - так и есть, CreateDIBSection в CopyBitmap.

Это уже лучше. Осталось загрузить имеющийся тифф в этот битмап. Спасибо.
22 фев 21, 23:35    [22284973]     Ответить | Цитировать Сообщить модератору
 Re: Картинки больше 2ГБ  [new]
rgreat
Member

Откуда:
Сообщений: 6582
Flying-home
Я до этого писал в BDS 2006, мне хватало.

Такая веселая хрень имхо вообще только в дельфи комьюнити и существует. ;)
22 фев 21, 23:39    [22284975]     Ответить | Цитировать Сообщить модератору
 Re: Картинки больше 2ГБ  [new]
Flying-home
Member

Откуда: kart.vrostove.net
Сообщений: 15000
rgreat
Flying-home
Я до этого писал в BDS 2006, мне хватало.

Такая веселая хрень имхо вообще только в дельфи комьюнити и существует. ;)

Не знаю, о каком комьюнити ты говоришь, я большей частью сам по себе. Мне для поделок хватало, и ладно.
22 фев 21, 23:42    [22284977]     Ответить | Цитировать Сообщить модератору
 Re: Картинки больше 2ГБ  [new]
ъъъъъ
Member

Откуда:
Сообщений: 1815
rgreat
Flying-home
Я до этого писал в BDS 2006, мне хватало.

Такая веселая хрень имхо вообще только в дельфи комьюнити и существует. ;)


Да ладно. К нам один человечек на работу устраиваться приходил, он на C++ пишет, использует MS VS 6.0, и (по его словам) контора, где он раньше работал.
22 фев 21, 23:42    [22284979]     Ответить | Цитировать Сообщить модератору
 Re: Картинки больше 2ГБ  [new]
Flying-home
Member

Откуда: kart.vrostove.net
Сообщений: 15000
Flying-home
Sapersky
Flying-home,

Если PixelFormat задан конкретный (не pfDevice по умолчанию), то должен создаваться DIB через CreateDIBSection.
Заглянул в потроха - так и есть, CreateDIBSection в CopyBitmap.

Это уже лучше. Осталось загрузить имеющийся тифф в этот битмап. Спасибо.

В него битмап из файла не получается загрузить. Все тот же TStream больше 2 гигов не умеет. Весело!
22 фев 21, 23:44    [22284980]     Ответить | Цитировать Сообщить модератору
 Re: Картинки больше 2ГБ  [new]
Flying-home
Member

Откуда: kart.vrostove.net
Сообщений: 15000
ъъъъъ
rgreat
пропущено...

Такая веселая хрень имхо вообще только в дельфи комьюнити и существует. ;)


Да ладно. К нам один человечек на работу устраиваться приходил, он на C++ пишет, использует MS VS 6.0, и (по его словам) контора, где он раньше работал.

Так это ключевые слова! Раньше = 20 лет назад.
22 фев 21, 23:46    [22284981]     Ответить | Цитировать Сообщить модератору
 Re: Картинки больше 2ГБ  [new]
rgreat
Member

Откуда:
Сообщений: 6582
ъъъъъ
К нам один человечек на работу устраиваться приходил
Как пришел так и ушел? ;)
22 фев 21, 23:48    [22284982]     Ответить | Цитировать Сообщить модератору
 Re: Картинки больше 2ГБ  [new]
ъъъъъ
Member

Откуда:
Сообщений: 1815
rgreat
ъъъъъ
К нам один человечек на работу устраиваться приходил
Как пришел так и ушел? ;)

Зачем нам сипипишники.
23 фев 21, 00:03    [22284986]     Ответить | Цитировать Сообщить модератору
 Re: Картинки больше 2ГБ  [new]
Sapersky
Member

Откуда:
Сообщений: 83
Flying-home
В него битмап из файла не получается загрузить. Все тот же TStream больше 2 гигов не умеет. Весело!
Вам же говорили, что с какой-то версии проблему со стримом исправили - я правда не знаю с какой, у меня XE8 и там не исправлено.
Или смотреть сторонние библиотеки для загрузки Tiff, которые не используют стримы. FreeImage вроде не использует, ImagingLib и т.д. Хотя у них могут быть свои проблемы с загрузкой огромных картинок - что поделаешь, специфическая задача, мало кому это нужно.
23 фев 21, 01:03    [22284999]     Ответить | Цитировать Сообщить модератору
 Re: Картинки больше 2ГБ  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 2471
Да не может gdi с подобной размерностью нормально работать. Прими как данность. Это уже много раз обсасывалось. Конкретно на своём компе я как-то вычислял максимальный размер битмапа, правда уже не помню точно, но до 30000 точно не дошло. Все подобные вещи рисуются по кускам/тайлам, как уже ранее сказали
23 фев 21, 02:28    [22285011]     Ответить | Цитировать Сообщить модератору
 Re: Картинки больше 2ГБ  [new]
Мудроглюков
Member

Откуда:
Сообщений: 8319
Flying-home,

Одной из генеральных задач при создании FireMonkey было предоставление возможностей
для создания богатого графического интерфейса и конечно добавлена работа
с большими графическими файлами.
Есть вот специально для больших изображений TBitmapSurface (совместимый с TBitmap).
...
PS Про TBitmapSurface так заявлено разработчиками FireMonkey.

//////////////////////////////////////
PS Скажи - это КАРТУ рисуешь? Для карт есть специальные типы.
PS Почему кусками не отрабатываешь? Лень думать над алгоритмом?
23 фев 21, 10:34    [22285040]     Ответить | Цитировать Сообщить модератору
 Re: Картинки больше 2ГБ  [new]
Flying-home
Member

Откуда: kart.vrostove.net
Сообщений: 15000
Мудроглюков
Flying-home,

Одной из генеральных задач при создании FireMonkey было предоставление возможностей
для создания богатого графического интерфейса и конечно добавлена работа
с большими графическими файлами.
Есть вот специально для больших изображений TBitmapSurface (совместимый с TBitmap).
...
PS Про TBitmapSurface так заявлено разработчиками FireMonkey.

//////////////////////////////////////
PS Скажи - это КАРТУ рисуешь? Для карт есть специальные типы.
PS Почему кусками не отрабатываешь? Лень думать над алгоритмом?


На спутниковом снимке хочу рисовать.

Я готов смириться с разбиением на куски. Но не хочу зависеть от видюшки. Хочу рисовать в ОЗУ средствами ЦПУ.
23 фев 21, 12:39    [22285080]     Ответить | Цитировать Сообщить модератору
 Re: Картинки больше 2ГБ  [new]
Flying-home
Member

Откуда: kart.vrostove.net
Сообщений: 15000
Мудроглюков
TBitmapSurface

Пацаны говорят, что не получается на ней рисовать. Приходится бить на куски, загружать в обычный TBitmap и рисовать на нем.
https://stackoverflow.com/questions/51523321/how-to-draw-fmx-surface-tbitmapsurface-on-fmx-graphics-tbitmap

Сообщение было отредактировано: 23 фев 21, 13:08
23 фев 21, 13:14    [22285101]     Ответить | Цитировать Сообщить модератору
 Re: Картинки больше 2ГБ  [new]
defecator
Member

Откуда:
Сообщений: 39697
Flying-home
Мудроглюков
TBitmapSurface

Пацаны говорят, что не получается на ней рисовать. Приходится бить на куски, загружать в обычный TBitmap и рисовать на нем.
https://stackoverflow.com/questions/51523321/how-to-draw-fmx-surface-tbitmapsurface-on-fmx-graphics-tbitmap


Graphics32 попробуй.
23 фев 21, 14:15    [22285133]     Ответить | Цитировать Сообщить модератору
 Re: Картинки больше 2ГБ  [new]
Flying-home
Member

Откуда: kart.vrostove.net
Сообщений: 15000
Sapersky
Flying-home,

Если PixelFormat задан конкретный (не pfDevice по умолчанию), то должен создаваться DIB через CreateDIBSection.
Заглянул в потроха - так и есть, CreateDIBSection в CopyBitmap.

CreateDIBSection тоже не работает. Сделал картинку 25000 на 25000, сохранил в файл, а там меньше 2ГБ. Сделал 30000 на 30000, поймал ту же ошибку.
23 фев 21, 15:12    [22285169]     Ответить | Цитировать Сообщить модератору
 Re: Картинки больше 2ГБ  [new]
Flying-home
Member

Откуда: kart.vrostove.net
Сообщений: 15000
А нет ли случайно в природе решений вроде виртуальной видеокарты? Чтобы подсистема GDI думала, что работает с видюшкой, а на самом деле использовалась обычная память компа?
23 фев 21, 15:29    [22285178]     Ответить | Цитировать Сообщить модератору
 Re: Картинки больше 2ГБ  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 2471
Flying-home
А нет ли случайно в природе решений вроде виртуальной видеокарты? Чтобы подсистема GDI думала, что работает с видюшкой, а на самом деле использовалась обычная память компа?
Значит только проктостоматология?...
23 фев 21, 15:39    [22285184]     Ответить | Цитировать Сообщить модератору
 Re: Картинки больше 2ГБ  [new]
Flying-home
Member

Откуда: kart.vrostove.net
Сообщений: 15000
defecator
Flying-home
пропущено...

Пацаны говорят, что не получается на ней рисовать. Приходится бить на куски, загружать в обычный TBitmap и рисовать на нем.
https://stackoverflow.com/questions/51523321/how-to-draw-fmx-surface-tbitmapsurface-on-fmx-graphics-tbitmap


Graphics32 попробуй.

Он закончился на XE2 и, похоже, не 64-битный. Да на нем это и написано.
https://graphics32.github.io/Docs/Installation.htm
Написано только, что в критических секциях может использовать инструкции x64 процессоров.
23 фев 21, 15:55    [22285189]     Ответить | Цитировать Сообщить модератору
 Re: Картинки больше 2ГБ  [new]
Flying-home
Member

Откуда: kart.vrostove.net
Сообщений: 15000
white_nigger
Flying-home
А нет ли случайно в природе решений вроде виртуальной видеокарты? Чтобы подсистема GDI думала, что работает с видюшкой, а на самом деле использовалась обычная память компа?
Значит только проктостоматология?...

Если такое решение будет простым и надежным, пуркуа бы не па?

Можно попытаться уточнить формулировку задачи:

Есть много больших картинок (> 2ГБ), на которых надо рисовать объекты размером с эти картинки. Есть много памяти и ядер, но мало видеокарт и мало видеопамяти.

Если я пойду путем разбиения картинки на приемлемые для GDI кусочки, я потеряю в производительности, потому что один поток будет ждать, пока предыдущий освободит видеопамять.
23 фев 21, 16:07    [22285197]     Ответить | Цитировать Сообщить модератору
 Re: Картинки больше 2ГБ  [new]
Flying-home
Member

Откуда: kart.vrostove.net
Сообщений: 15000
А все эти современные новомодные процессоры с графическими ядрами ограничены по объему памяти, которую могут использовать? Я могу им в биосе отдать 60 ГБ ОЗУ?
23 фев 21, 16:15    [22285200]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4   вперед  Ctrl      все
Все форумы / Delphi Ответить