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


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