powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Картинки больше 2ГБ
25 сообщений из 94, страница 3 из 4
Картинки больше 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
25 сообщений из 94, страница 3 из 4
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Картинки больше 2ГБ
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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