powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Картинки больше 2ГБ
94 сообщений из 94, показаны все 4 страниц
Картинки больше 2ГБ
    #40047973
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наконец дошли руки до моей поделки. Сразу столкнулся с двумя проблемами.

1. При попытке открыть тиф больше 2 гигов оказалось, что TStream этого не может потому что у него лапки Longint. Объяснение и решение нашел тут. Но это пол-беды.
2. При попытке просто создать картинку и задать ей размеры 25000 на 25000 (заведомо больше 2ГБ) поймал исключение при вызове gdi32
Код: plaintext
1.
CreateCompatibleBitmap(DC: HDC; Width, Height: Integer): HBitmap;

. А тут уже не совсем ясно. Это может быть связано с тем, что у меня в видюшке всего 2 гига памяти?

Прошу совета, в каком направлении двигаться. В общем, задача выглядит так: открываем большую-большую картинку, рисуем на ней LineTo, TextOut, сохраняем. Показывать картинку целиком я не собираюсь, только маленький кусочек для превью. Разбивать картинку на кусочки тоже не собираюсь, там на стыках слишком много лишних расчетов получится. Да и не для того я 32 гига оперативки покупал.

Delphi XE3, Windows 7 SP1 x64.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40047974
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-home,

приложение 32бит? ну не может оно аллокировать больше 2 гиг. Что за программисты пошли, вообще ничего не знают.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40047977
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-homeА тут уже не совсем ясно.

Что тебе неясно? Лапки не только у TStream. Забей на битмап, работай просто с массивом
пикселей.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40047978
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
Flying-home,

приложение 32бит? ну не может оно аллокировать больше 2 гиг. Что за программисты пошли, вообще ничего не знают.

Да не, специально скачал свежую (относительно) Дельфу, выставил в свойствах проекта таргет платформ x64.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40047981
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-home
А тут уже не совсем ясно. Это может быть связано с тем, что у меня в видюшке всего 2 гига памяти?
Нет. DDB буфер в RAM сидит, и у него есть ограничение на размер. Маловероятно что мы доживем до времени когда буфер отрисовки будет рассчитан на мониторы с таким разрешением.

Flying-home

Прошу совета, в каком направлении двигаться.
В том, куда ты не хочешь.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40047982
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Flying-homeА тут уже не совсем ясно.

Что тебе неясно? Лапки не только у TStream. Забей на битмап, работай просто с массивом
пикселей.
Думаю, так и придется. А рисовать как? Самому вот это вот все реализовывать? Я хочу и полупрозрачность, и другие вкусняшки GDI.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40047983
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
Flying-home
А тут уже не совсем ясно. Это может быть связано с тем, что у меня в видюшке всего 2 гига памяти?
Нет. DDB буфер в RAM сидит, и у него есть ограничение на размер. Маловероятно что мы доживем до времени когда буфер отрисовки будет рассчитан на мониторы с таким разрешением.

Flying-home

Прошу совета, в каком направлении двигаться.
В том, куда ты не хочешь.

Бить на кусочки? Грустно.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40047984
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-home,
Ты хочешь сказать, что исходная картинка не из кусочков? Можно я не поверю?
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40047986
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
Flying-home,
Ты хочешь сказать, что исходная картинка не из кусочков? Можно я не поверю?

Ну конечно, была склеена из кусочков. Но рисовать-то удобнее на целом листе.

Кстати, есть такие картинки, которые точно не из кусочков.
https://api.discover.digitalglobe.com/show?id=103001008D9D1700
Это превьюшка снимка разрешением 0.5 метра на пиксель. Там точно больше 2 гигов.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40047988
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-home,
Нет таких матриц в природе, это все панорамные съемки. И хранить их в непорезанном виде - совсем не умная идея.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40047994
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
Flying-home,
Нет таких матриц в природе, это все панорамные съемки. И хранить их в непорезанном виде - совсем не умная идея.

Они хранятся продаются в непорезанном виде. И ортокоррекцию им делают тоже в непорезанном виде. Так удобнее.
Кстати, делаются они тоже целиком, за один проход. Но там по принципу сканера фотка делается, ширина снимка ограничена размером матрицы, а высота - нет.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40047996
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ладно, вернемся к нашим баранам. Если я буду резать картинки на кусочки по 2 гига, смогу ли я работать с каждым их этих кусочков в отдельном потоке?

И это. Тот же Ирфан Вью легко и быстро открывает и показывает этот тиф. Значит, он что-то знает, чего не знаем мы?
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40047998
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-home
Они хранятся продаются в непорезанном виде. И ортокоррекцию им делают тоже в непорезанном виде. Так удобнее.
Нифига это не удобнее. Удобно тайлы + пирамида, очень быстро получаешь и целиком в малом масштабе и нужный фрагмент в натуральном. Это пограничные случаи, все остальные в них вписываются.
Рискну предположить, что в твоем tiff-е оно и есть, только зачем-то запихнуто в один файл.

Flying-home
Но там по принципу сканера фотка делается, ширина снимка ограничена размером матрицы, а высота - нет.
Уверен?
Сомнительно что так со спутника можно снять, временной параллакс и все такое.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048000
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-home
И это. Тот же Ирфан Вью легко и быстро открывает и показывает этот тиф. Значит, он что-то знает, чего не знаем мы?
Посмотри инфу о файле. Наверняка многостраничный и первой как раз верхушка пирамиды.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048003
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-home
Если я буду резать картинки на кусочки по 2 гига, смогу ли я работать с каждым их этих кусочков в отдельном потоке?

Я имею в виду, нет ли у GDI каких-то ограничений на вызов функций не из основного потока приложения?

Flying-home
Ирфан Вью легко и быстро открывает и показывает этот тиф. Значит, он что-то знает, чего не знаем мы?

Правда, он на плюсах написан.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048004
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-home
Я имею в виду, нет ли у GDI каких-то ограничений на вызов функций не из основного потока приложения?
Нет.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048005
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-home
Тот же Ирфан Вью легко и быстро открывает и показывает этот тиф. Значит, он что-то знает, чего не знаем мы?
Есть идея скормить этот тиф какому-нибудь опенсорсовому просмотрщику. Если он с ней справится, то можно будет посмотреть в код.

Можете дать образец такого тифа?
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048007
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
Flying-home
Они хранятся продаются в непорезанном виде. И ортокоррекцию им делают тоже в непорезанном виде. Так удобнее.
Нифига это не удобнее. Удобно тайлы + пирамида, очень быстро получаешь и целиком в малом масштабе и нужный фрагмент в натуральном. Это пограничные случаи, все остальные в них вписываются.
Рискну предположить, что в твоем tiff-е оно и есть, только зачем-то запихнуто в один файл.

Flying-home
Но там по принципу сканера фотка делается, ширина снимка ограничена размером матрицы, а высота - нет.
Уверен?
Сомнительно что так со спутника можно снять, временной параллакс и все такое.


1. Тайлы начинают рулить, когда приходится показывать эту картинку на экране. А на стадии обработки одним куском удобнее. Ну представь, тебе надо нарисовать горизонталь, которая тянется через всю картинку. Или любую другую линию. На тайлах никто не рисует.

2. Да, уверен. Просто по-другому никак.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048008
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft
Flying-home
Тот же Ирфан Вью легко и быстро открывает и показывает этот тиф. Значит, он что-то знает, чего не знаем мы?
Есть идея скормить этот тиф какому-нибудь опенсорсовому просмотрщику. Если он с ней справится, то можно будет посмотреть в код.

Можете дать образец такого тифа?

Классная идея! Ща выложу.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048010
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-home
Ну представь, тебе надо нарисовать горизонталь, которая тянется через всю картинку. Или любую другую линию. На тайлах никто не рисует.
Мне и представлять не надо, имею большой опыт подобных действий.
Аннотации нужно в векторном виде хранить и рисовать оверлеем.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048011
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
Flying-home
Ну представь, тебе надо нарисовать горизонталь, которая тянется через всю картинку. Или любую другую линию. На тайлах никто не рисует.
Мне и представлять не надо, имею большой опыт подобных действий.
Аннотации нужно в векторном виде хранить и рисовать оверлеем.

В общем и целом да. Но иногда надо рисовать. Например, когда конечное приложение не умеет вектор. Или как в моем случае, нет приложений, которые рисовали бы вектор так, как мне надо.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048014
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-home
Или как в моем случае, нет приложений, которые рисовали бы вектор так, как мне надо.
Ну так напиши сам. Или программиста найди.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048015
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-home
miksoft
пропущено...
Есть идея скормить этот тиф какому-нибудь опенсорсовому просмотрщику. Если он с ней справится, то можно будет посмотреть в код.

Можете дать образец такого тифа?

Классная идея! Ща выложу.

Не все так просто. Яндекс хочет, чтобы я какую-то прогу установил.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048022
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-home
2. При попытке просто создать картинку и задать ей размеры 25000 на 25000 (заведомо больше 2ГБ) поймал исключение при вызове gdi32
Код: plaintext
1.
CreateCompatibleBitmap(DC: HDC; Width, Height: Integer): HBitmap;


. А тут уже не совсем ясно. Это может быть связано с тем, что у меня в видюшке всего 2 гига памяти?

Соколинский Борис
Нет. DDB буфер в RAM сидит, и у него есть ограничение на размер. Маловероятно что мы доживем до времени когда буфер отрисовки будет рассчитан на мониторы с таким разрешением.


Вот тут пацаны в далеком 2001 году пришли к выводу, что работа CreateCompatibleBitmap таки зависит от видеокарты и настройки драйверов.
авторНичего странного. Вызов CreateCompatibleBitmap идет прямиком в дисплей-драйвер под именем DrvCreateDeviceBitmap. Это дает возможность драйверу создать битмап прямо в видеопамяти, что значительно ускоряет последующую работу с ним. Так что очень вероятно, что драйвер здесь причастен.

Это никуда не годится. Получается, надо искать способы рисовать на битмапе без GDI.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048023
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
Flying-home
Или как в моем случае, нет приложений, которые рисовали бы вектор так, как мне надо.
Ну так напиши сам. Или программиста найди.

Ах, если бы делать то что надо было бы так же просто, как знать, что надо делать! (С)
"Написать самому" в данном случае будет сложнее, чем написать свою ГИС с нуля. У меня сейчас продукт получается в результате последовательных действий в четырех разных программах. Работа третьей меня не устраивает. Надо или ждать, пока ее разработчики почешутся, или писать то, о чем я говорю. Именно рисовать на больших растрах.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048028
Sapersky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Flying-home,

Забудьте про DDB (CreateCompatibleBitmap), в современных виндах от них никакой пользы нет.
DIB 25000*25000 в 64-битном режиме создаётся, но работает ли рисование - не пробовал.
Код: pascal
1.
2.
3.
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+, то опять же всё пойдёт через виндовые битмапы.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048032
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sapersky
Забудьте про DDB (CreateCompatibleBitmap), в современных виндах от них никакой пользы нет.

Так она вызывается в SetSize!
SetSize - CopyImage - CopyBitmap - Result := GDICheck(CreateCompatibleBitmap(ScreenDC, bmWidth, bmHeight))
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048034
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-home
Да не, специально скачал свежую (относительно) Дельфу

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

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

А XE3 это всего 2-я версия среды с поддержкой x64.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048036
Sapersky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Flying-home,

Если PixelFormat задан конкретный (не pfDevice по умолчанию), то должен создаваться DIB через CreateDIBSection.
Заглянул в потроха - так и есть, CreateDIBSection в CopyBitmap.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048038
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
Flying-home
Да не, специально скачал свежую (относительно) Дельфу

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

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

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

Я до этого писал в BDS 2006, мне хватало. Тут захотелось много памяти, спросил пацанов в соседнем топике, что ставить. Посоветовали XE3, сказали, за глаза хватит.
А тут, оказывается, не все так просто. И TStream с шестой версии не переписывался.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048039
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sapersky
Flying-home,

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

Это уже лучше. Осталось загрузить имеющийся тифф в этот битмап. Спасибо.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048040
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-home
Я до этого писал в BDS 2006, мне хватало.

Такая веселая хрень имхо вообще только в дельфи комьюнити и существует. ;)
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048041
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
Flying-home
Я до этого писал в BDS 2006, мне хватало.

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

Не знаю, о каком комьюнити ты говоришь, я большей частью сам по себе. Мне для поделок хватало, и ладно.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048042
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rgreat
Flying-home
Я до этого писал в BDS 2006, мне хватало.

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


Да ладно. К нам один человечек на работу устраиваться приходил, он на C++ пишет, использует MS VS 6.0, и (по его словам) контора, где он раньше работал.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048043
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-home
Sapersky
Flying-home,

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

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

В него битмап из файла не получается загрузить. Все тот же TStream больше 2 гигов не умеет. Весело!
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048044
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
rgreat
пропущено...

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


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

Так это ключевые слова! Раньше = 20 лет назад.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048045
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
К нам один человечек на работу устраиваться приходил
Как пришел так и ушел? ;)
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048048
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rgreat
ъъъъъ
К нам один человечек на работу устраиваться приходил
Как пришел так и ушел? ;)

Зачем нам сипипишники.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048053
Sapersky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Flying-home
В него битмап из файла не получается загрузить. Все тот же TStream больше 2 гигов не умеет. Весело!
Вам же говорили, что с какой-то версии проблему со стримом исправили - я правда не знаю с какой, у меня XE8 и там не исправлено.
Или смотреть сторонние библиотеки для загрузки Tiff, которые не используют стримы. FreeImage вроде не использует, ImagingLib и т.д. Хотя у них могут быть свои проблемы с загрузкой огромных картинок - что поделаешь, специфическая задача, мало кому это нужно.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048056
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да не может gdi с подобной размерностью нормально работать. Прими как данность. Это уже много раз обсасывалось. Конкретно на своём компе я как-то вычислял максимальный размер битмапа, правда уже не помню точно, но до 30000 точно не дошло. Все подобные вещи рисуются по кускам/тайлам, как уже ранее сказали
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048076
Мудроглюков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-home,

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

//////////////////////////////////////
PS Скажи - это КАРТУ рисуешь? Для карт есть специальные типы.
PS Почему кусками не отрабатываешь? Лень думать над алгоритмом?
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048107
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мудроглюков
Flying-home,

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

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


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

Я готов смириться с разбиением на куски. Но не хочу зависеть от видюшки. Хочу рисовать в ОЗУ средствами ЦПУ.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048121
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мудроглюков
TBitmapSurface

Пацаны говорят, что не получается на ней рисовать. Приходится бить на куски, загружать в обычный TBitmap и рисовать на нем.
https://stackoverflow.com/questions/51523321/how-to-draw-fmx-surface-tbitmapsurface-on-fmx-graphics-tbitmap
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048133
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Flying-home
Мудроглюков
TBitmapSurface

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


Graphics32 попробуй.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048154
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sapersky
Flying-home,

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

CreateDIBSection тоже не работает. Сделал картинку 25000 на 25000, сохранил в файл, а там меньше 2ГБ. Сделал 30000 на 30000, поймал ту же ошибку.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048160
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А нет ли случайно в природе решений вроде виртуальной видеокарты? Чтобы подсистема GDI думала, что работает с видюшкой, а на самом деле использовалась обычная память компа?
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048164
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-home
А нет ли случайно в природе решений вроде виртуальной видеокарты? Чтобы подсистема GDI думала, что работает с видюшкой, а на самом деле использовалась обычная память компа?
Значит только проктостоматология?...
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048169
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 процессоров.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048175
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_nigger
Flying-home
А нет ли случайно в природе решений вроде виртуальной видеокарты? Чтобы подсистема GDI думала, что работает с видюшкой, а на самом деле использовалась обычная память компа?
Значит только проктостоматология?...

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

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

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

Если я пойду путем разбиения картинки на приемлемые для GDI кусочки, я потеряю в производительности, потому что один поток будет ждать, пока предыдущий освободит видеопамять.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048177
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А все эти современные новомодные процессоры с графическими ядрами ограничены по объему памяти, которую могут использовать? Я могу им в биосе отдать 60 ГБ ОЗУ?
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048182
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-homeЕсть много больших картинок (> 2ГБ), на которых надо рисовать объекты размером с эти
картинки. Есть много памяти и ядер, но мало видеокарт и мало видеопамяти.

Делаешь из объекта, который надо рисовать, поток пикселей. Потом просто складываешь два
потока любым удобным способом, это не требует затрат памяти.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048189
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я, похоже, зря паникую. Вот этот код работает.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
  SetLength(b, 10);
  for i := 0 to 9 do begin
    b[i] := TBitmap.Create;
    b[i].PixelFormat := pf24Bit;
    b[i].SetSize(25000, 25000);
    b[i].Canvas.Pen.Color := clBlack;
    b[i].Canvas.MoveTo(1, 1);
    b[i].Canvas.LineTo(24999, 24999);
    Memo1.Lines.Add(IntToStr(i) + ' done');
    Application.ProcessMessages;
  end;


И картинки сохраняются в BMP чуть меньше 2 гигов. В принципе, это меня устроит, если заработает в десяти потоках. Остается открытым вопрос откуда GDI взяло это ограничение на 2 гига? Неужели все-таки это объем видеопамяти?
Ща потоки запилю, подождите.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048192
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У нас есть коммерческий продукт для работы с географическими сервисами. И там именно поточно блочная архитектура. Если бы он всю память отжирал, им бы никто не рискнул пользоваться)) ...и да вас это тоже касается))
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048201
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator
Graphics32 попробуй.
Хочу Graphics32 под линукс.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048202
Sapersky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Flying-home
Он закончился на XE2 и, похоже, не 64-битный. Да на нем это и написано
Видимо, устарела эта страница. Самое актуальное сейчас на Гитхабе. Есть пакеты для всех версий:
https://github.com/graphics32/graphics32/tree/master/Source/Packages
и 64 бита тоже, судя по исходникам. Странно, если бы не было - это же самая популярная граф. библиотека для Дельфи.

Ограничения в GDI связаны скорее всего с его возрастом, во времена проектирования считали, что "High(Integer) хватит всем".
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048203
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_nigger
У нас есть коммерческий продукт для работы с географическими сервисами. И там именно поточно блочная архитектура. Если бы он всю память отжирал, им бы никто не рискнул пользоваться)) ...и да вас это тоже касается))

Я ж могу заранее сказать, сколько памяти отжирать.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048204
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-home
defecator
пропущено...


Graphics32 попробуй.

Он закончился на XE2 и, похоже, не 64-битный. Да на нем это и написано.
https://graphics32.github.io/Docs/Installation.htm
Написано только, что в критических секциях может использовать инструкции x64 процессоров.

https://github.com/graphics32/graphics32
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048205
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В потоках все отработало на ура. Только при сохранении битмапа он еще столько же памяти отжирает. Но это решаемо.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048206
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_nigger
У нас есть коммерческий продукт для работы с географическими сервисами. И там именно поточно блочная архитектура. Если бы он всю память отжирал, им бы никто не рискнул пользоваться)) ...и да вас это тоже касается))

Че за продукт? Можно посмотреть?
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048207
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sapersky
Ограничения в GDI связаны скорее всего с его возрастом, во времена проектирования считали, что "High(Integer) хватит всем".

Было бы интересно попытать владельцев разных видюшек выполнить это.
Код: pascal
1.
2.
3.
b := TBitmap.Create;
b.PixelFormat := pf24Bit;
b.SetSize(25000, 25000);


25000 - меньше 2 гигов, 30000 - больше 2 гигов.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048210
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sapersky
Flying-home
Он закончился на XE2 и, похоже, не 64-битный. Да на нем это и написано
Видимо, устарела эта страница. Самое актуальное сейчас на Гитхабе. Есть пакеты для всех версий:
https://github.com/graphics32/graphics32/tree/master/Source/Packages
и 64 бита тоже, судя по исходникам. Странно, если бы не было - это же самая популярная граф. библиотека для Дельфи.

Ограничения в GDI связаны скорее всего с его возрастом, во времена проектирования считали, что "High(Integer) хватит всем".

Круто. Наверное, заюзаю. Пока заметил, что они линии без пикселизации рисуют, это хорошо.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048216
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо. Пока выбрал такой путь:
Разбивать тифы на куски не больше 2 гигов, рисовать на них, потом склеивать обратно.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048224
DHDD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Flying-home,

win64, 10.3.3, RAM 12Gb, Video Internal max 1849 Mb (Windows 7x64)

25000x25000: ошибок нет, сохранение на диск 1 875 000 054 bytes.

30000x30000: raised exception class EOutOfResources with message 'Параметр задан неверно.'
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048231
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-homeПока выбрал такой путь:
Разбивать тифы на куски не больше 2 гигов, рисовать на них, потом склеивать обратно.

Я не скажу за JPEG, но все остальные поддерживаемые TIFF-ом форматы, описанные в
википузии, способны обрабатываться последовательно, не требуя затрат памяти вообще.

Просто попробуй свои "куски" сделать один пиксель высотой.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048239
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Flying-home
defecator
пропущено...


Graphics32 попробуй.

Он закончился на XE2 и, похоже, не 64-битный. Да на нем это и написано.


Он прекрасно работает в x64, а "32" в названии - это то, что он работает с 32-ухбитными картинками
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048242
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator
Flying-home
пропущено...

Он закончился на XE2 и, похоже, не 64-битный. Да на нем это и написано.


Он прекрасно работает в x64, а "32" в названии - это то, что он работает с 32-ухбитными картинками
Да, я уже понял.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048243
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Flying-homeПока выбрал такой путь:
Разбивать тифы на куски не больше 2 гигов, рисовать на них, потом склеивать обратно.

Я не скажу за JPEG, но все остальные поддерживаемые TIFF-ом форматы, описанные в
википузии, способны обрабатываться последовательно, не требуя затрат памяти вообще.

Просто попробуй свои "куски" сделать один пиксель высотой.На манер "сканера"? Да, интересное решение. Но сперва мне надо будет на чем-то нарисовать свои лайн-ту/мув-ту. А потом уже накладывать два изображения построчно.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048248
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-homeНо сперва мне надо будет на чем-то нарисовать свои лайн-ту/мув-ту.

А надо ли? Проще завести список координат пикселей, которые надо портить в картинке.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048250
Sapersky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Flying-home
Было бы интересно попытать владельцев разных видюшек выполнить это.
25000 - меньше 2 гигов, 30000 - больше 2 гигов.
Не зависит это от видюшки. У меня 8 Гб видеопамяти, но 30000*30000 вылетает.
DIB-ы всегда в системной памяти создавались, они же device-independent.

Если интересны картографические проекты, то есть SAS.Planet с открытыми исходниками. Использует, кстати, Graphics32.
https://github.com/sasgis/sas.planet.src
Правда, официальный сайт с бинарниками у них сейчас лежит, но можно на ютубе посмотреть, как оно выглядит.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048251
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Flying-homeНо сперва мне надо будет на чем-то нарисовать свои лайн-ту/мув-ту.

А надо ли? Проще завести список координат пикселей, которые надо портить в картинке.Думаю, надо. Если у меня есть координаты двух точек, между которыми надо нарисовать линию, то нахождение всех пикселей, "которые надо испортить" делается как раз лайнту.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048252
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sapersky
Flying-home
Было бы интересно попытать владельцев разных видюшек выполнить это.
25000 - меньше 2 гигов, 30000 - больше 2 гигов.
Не зависит это от видюшки. У меня 8 Гб видеопамяти, но 30000*30000 вылетает.
DIB-ы всегда в системной памяти создавались, они же device-independent.

Если интересны картографические проекты, то есть SAS.Planet с открытыми исходниками. Использует, кстати, Graphics32.
https://github.com/sasgis/sas.planet.src
Правда, официальный сайт с бинарниками у них сейчас лежит, но можно на ютубе посмотреть, как оно выглядит.
Я давно на сасгисе зареган. Лет 8 наверно. Грандиозный проект по выкачиванию всякого интересного.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048260
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-homeДумаю, надо. Если у меня есть координаты двух точек, между которыми надо нарисовать линию,
то нахождение всех пикселей, "которые надо испортить" делается как раз лайнту.

Ну смотри: вот есть у тебя линия от 0,0 до 99,99. Битмап с этой линией займёт 10000
пикселей. Просто пиксели линии - 100. Экономия памяти на два порядка.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40048263
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Flying-homeДумаю, надо. Если у меня есть координаты двух точек, между которыми надо нарисовать линию,
то нахождение всех пикселей, "которые надо испортить" делается как раз лайнту.

Ну смотри: вот есть у тебя линия от 0,0 до 99,99. Битмап с этой линией займёт 10000
пикселей. Просто пиксели линии - 100. Экономия памяти на два порядка.
Да я не собираюсь экономить память. Я думал, что ограничения в 2 ГБ связаны с количеством видеопамяти. Оказалось, что нет.

Судя по всему, память под битмап под рисование примитивов выделяется хоть и видеодрайвером, но в обычном ОЗУ и в ней можно рисовать средствами GDI. И выделять ее можно сколько угодно (сколько угодно кусков по 2ГБ) и работать с ней многопоточно. Это все, что мне надо.

Но это не точно. Надо будет еще несколько проверок сделать.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40049126
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sapersky
Правда, официальный сайт с бинарниками у них сейчас лежит...

Что-то долго лежит...
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40049222
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-home
Судя по всему, память под битмап под рисование примитивов выделяется хоть и видеодрайвером, но в обычном ОЗУ и в ней можно рисовать средствами GDI. И выделять ее можно сколько угодно (сколько угодно кусков по 2ГБ) и работать с ней многопоточно. Это все, что мне надо.

Не работает в дополнительных потоках. Это то, чего я опасался изначально. Начинает рисовать, потом в какой-то момент перестает без всяких ошибок и предупреждений. Как-будто игнорирует код. При этом поток продолжает работать, что-то считать, сохранять битмап в файл. И еще не освобождает память, выделенную под картинку. Если не трудно, посмотрите, пожалуйста, код. Может, я чего намудрил? Может, чего не вижу или не знаю?

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

Для того, чтобы убедиться, что не работает, достаточно одного потока (у меня по крайней мере). В диспетчере задач пока он рисует, работает ядро (красненький график). Как перестает рисовать, остается только зелененький. После сохранения картинки в отчете пишется, сколько проходов было сделано. А на самой картинке два числа, второе - количество проходов, которые реально рисовались.

После остановки потоков приложение надо закрывать.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40049232
Sapersky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Flying-home,

Вроде бы в VCL рисование не потокобезопасное, какие-то глобальные переменные используются, что ли (точно не помню, давно TBitmap не использую).
То есть от размера битмапов это скорее всего не зависит.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40049245
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sapersky
Flying-home,

Вроде бы в VCL рисование не потокобезопасное, какие-то глобальные переменные используются, что ли (точно не помню, давно TBitmap не использую).
То есть от размера битмапов это скорее всего не зависит.

А какие там глобальные переменные могут быть? Битмап и битмап.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40049305
Sapersky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Flying-home,

Не знаю, но так уж оно устроено.
"Apparently the Delphi VCL bitmap is not threadsafe, even if you don't display it"
https://stackoverflow.com/questions/27406055/delphi-bitmap-in-thread
Можно Canvas.Lock попробовать и создавать битмапы заранее, не в потоках. Но в рабочем приложении в потоке будет же ещё распаковка tiff? Если она идёт через VCL-ные битмапы, то тоже может заглючить. В общем, лучше избавляться от TBitmap.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40049307
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sapersky,

Берите Graphics32 и рисуйте в потоках. Но только его собственными методами, а не трансляцией GDI-шных.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40049383
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sapersky,

привет, стукни мне плиз в телегу по поводу Graphics32, есть вопрос
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40051283
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat,

Я там в TCustomBitmap32.LoadFromFile вот это увидел.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
...
P := TPicture.Create;
  try
    P.LoadFromFile(FileName);
    Assign(P);
  finally
    P.Free;
  end;
...



Graphics32 точно non-GDI?
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40051285
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Flying-home
rgreat,

Я там в TCustomBitmap32.LoadFromFile вот это увидел.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
...
P := TPicture.Create;
  try
    P.LoadFromFile(FileName);
    Assign(P);
  finally
    P.Free;
  end;
...


Graphics32 точно non-GDI?

ты предлагаешь, чтобы GR32 реализовал нативно загрузку из статыщ графических форматов ?
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40051295
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator
Flying-home
rgreat,

Я там в TCustomBitmap32.LoadFromFile вот это увидел.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
...
P := TPicture.Create;
  try
    P.LoadFromFile(FileName);
    Assign(P);
  finally
    P.Free;
  end;
...



Graphics32 точно non-GDI?

ты предлагаешь, чтобы GR32 реализовал нативно загрузку из статыщ графических форматов ?

Да я ничего не предлагаю. Я ищу подходящий мне инструмент. Была предложена Graphics32, как независящая от GDI. Похоже, это не так.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40051306
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-home
rgreat,

Я там в TCustomBitmap32.LoadFromFile вот это увидел.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
...
P := TPicture.Create;
  try
    P.LoadFromFile(FileName);
    Assign(P);
  finally
    P.Free;
  end;
...



Graphics32 точно non-GDI?

Graphics32 никогда не была "non-GDI".
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40051307
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-home
Да я ничего не предлагаю. Я ищу подходящий мне инструмент. Была предложена Graphics32, как независящая от GDI . Похоже, это не так.

Не надо ничего придумывать.

То что Graphics32 во многом может работать не пользуясь функциями GDI не значит что она GDI не использует вообще.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40051308
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecatorты предлагаешь, чтобы GR32 реализовал нативно загрузку из статыщ графических форматов ?

Так GDI с этим не поможет, там поддержаны только BMP, ICO и т.п.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40051334
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying-home
Flying-home
Судя по всему, память под битмап под рисование примитивов выделяется хоть и видеодрайвером, но в обычном ОЗУ и в ней можно рисовать средствами GDI. И выделять ее можно сколько угодно (сколько угодно кусков по 2ГБ) и работать с ней многопоточно. Это все, что мне надо.

Не работает в дополнительных потоках. Это то, чего я опасался изначально. Начинает рисовать, потом в какой-то момент перестает без всяких ошибок и предупреждений. Как-будто игнорирует код. При этом поток продолжает работать, что-то считать, сохранять битмап в файл. И еще не освобождает память, выделенную под картинку. Если не трудно, посмотрите, пожалуйста, код. Может, я чего намудрил? Может, чего не вижу или не знаю?

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

Для того, чтобы убедиться, что не работает, достаточно одного потока (у меня по крайней мере). В диспетчере задач пока он рисует, работает ядро (красненький график). Как перестает рисовать, остается только зелененький. После сохранения картинки в отчете пишется, сколько проходов было сделано. А на самой картинке два числа, второе - количество проходов, которые реально рисовались.

После остановки потоков приложение надо закрывать.

https://www.sql.ru/forum/actualfile.aspx?id=22287330] Приложенный файл (first.zip - 86Kb)


Поменял TBitmap на TBitmap32, убрал PixelFormat и все заработало.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40051335
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Flying-home
Flying-home
пропущено...

Не работает в дополнительных потоках. Это то, чего я опасался изначально. Начинает рисовать, потом в какой-то момент перестает без всяких ошибок и предупреждений. Как-будто игнорирует код. При этом поток продолжает работать, что-то считать, сохранять битмап в файл. И еще не освобождает память, выделенную под картинку. Если не трудно, посмотрите, пожалуйста, код. Может, я чего намудрил? Может, чего не вижу или не знаю?

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

Для того, чтобы убедиться, что не работает, достаточно одного потока (у меня по крайней мере). В диспетчере задач пока он рисует, работает ядро (красненький график). Как перестает рисовать, остается только зелененький. После сохранения картинки в отчете пишется, сколько проходов было сделано. А на самой картинке два числа, второе - количество проходов, которые реально рисовались.

После остановки потоков приложение надо закрывать.

https://www.sql.ru/forum/actualfile.aspx?id=22287330] Приложенный файл (first.zip - 86Kb)


Поменял TBitmap на TBitmap32, убрал PixelFormat и все заработало.


и чо, даже 2 гига BMP загружает ?
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40051336
Sapersky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Flying-home
Я ищу подходящий мне инструмент. Была предложена Graphics32, как независящая от GDI. Похоже, это не так.
Рисование в Graphics32 возможно без GDI. Про загрузку я не знал нюансов. Оказывается, картинки грузит через стандартные средства.
https://graphics32.github.io/Docs/Units/GR32/Classes/TBitmap32/_Body.htm
Если и так работает - хорошо, если нет, ищите другие библиотеки для загрузки. Я ранее FreeImage предлагал. Также для (почти?) любого известного формата есть библиотека с эталонной реализацией, называется lib[формат].
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40051338
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Sapersky
FreeImage


FreeImage не умеет рисовать на картинках
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40051339
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Я ему на параллельном форуме показал, что в Delphi можно загружать картинки в 2 гига без проблем
И даже рисовать на них.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40051341
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator
Я ему на параллельном форуме показал, что в Delphi можно загружать картинки в 2 гига без проблем
И даже рисовать на них.

Показал видео .
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40052495
Sapersky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecator
FreeImage не умеет рисовать на картинках
FreeImage в дополнение к Graphics32.

Я ещё вспомнил, что в новых Дельфях есть TWicImage. Работает он разумеется через TBitmap, но можно выковырять оттуда загрузку картинки через WIC и понадеяться, что MS озаботилась отсутствием глупых ограничений в этом относительно новом API.
...
Рейтинг: 0 / 0
Картинки больше 2ГБ
    #40052721
yemets63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
немного не в тему, а хотя может наоборот в тему, была задача лет 10 назад может более, где ни чего архивировать смысла не было.
был заказчик, так вот он поставил задачу, сделать базу данных из MKV файлов, кое что я видел, но это была полная глуппость в постановке задач, но как говорят, есть заказ, будет решение.
так вот, файлы MKV прыгали от 500 метров до 3000 метров (3Гб).
ни какого складирования на диски, а всё в базу, мне повезло, он согласился тогда использовать Oracle
тогда была или 10-ка или 9-ка, и не Enterprise версия, у заказчика даже была лицензия на Оракл, но какая то мелкая,
ну так вот, я создал небольшую базу данных, написал к ней GUI, и использвал поля BLOB или даже LONG RAW (не помню сейчас), а они были по 2 Gb в той версии Oracle.
так вот мой GUI просто брал эти файлы и писал в базу, а там где они рвались на куски или нет, заказчик не знает. эти файлы напрямую не посмотришь (воиспроизвети из БД нииизззяяяя, может сейчас можно что то придумать, грузить куда нибудь в переменную вместе с КОДеКом, но тогда низзяяяя было).
В итоге файлы загружались и выгружались. При том анализ был на случай какого нибудь разрыва закачки, была также организована докачка.
я узнал через пару лет, у него было тогда уже около 16 ТБ архива и что он туда грузил, что именно потом, мне уже не известно. но замечаний не поступало ни разу. Суть была типа Каталогизатор, или Архивариус. Зачем все в базе держать?, это вопросы к заказчику.

поэтому берете файл 2Гб или 22Гб, и грузите его кусочками, о структуре файла даже заморачиваться не надо. определите блок, который будет вам удобнее в случае разрыва, чтобы было проще разрыв найти для докачки и вперед!!!!!!
...
Рейтинг: 0 / 0
94 сообщений из 94, показаны все 4 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Картинки больше 2ГБ
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]