@justslipknot

Как создать Bitmap большого размера в C#?

Пытаюсь создать битмап 30к на 30к, но вылетает ArgumentException. Проблема решила библиотека ImageSharp, но с ней у меня изображения не подгружаются полностью и есть артефакты. Как создать битмап большого размера без доп. библиотек и массива битмапов (одно из решений, что я нашел на SO) ?
Если есть способ создать полотно большого размера для размещения картинок на нём, то готов рассмотреть другой способ.

Что я пробовал: прописывал gcallowverylargeobjects = true
Приложение: Консоль, .NET 6 (пробовал и .NET 5)
Компьютер мощный, ОЗУ должно хватать точно (64гб)
  • Вопрос задан
  • 225 просмотров
Решения вопроса 1
vabka
@vabka Куратор тега .NET
Токсичный шарпист
Ну во-первых точно не получится использовать стандартный Bitmap.
Хранить в куче такой большой объект тоже не следует, тк он 100% попадёт в LOH
+ в .NET есть ограничение в 2гб на объекты в управляемой куче.
Описанное вами изображение как раз в этот лимит и не влезет.

Остаётся два с половиной варианта:
1. Делить огромное изображение на чанки по меньше (либо по пикселям, либо по каналам, либо и так и так)
2. Хранить изображение в неуправляемой памяти, выделять и освобождать память вручную.
В .net 6 как раз добавили Native alloc API для этого.
3. Возможно есть какая-нибудь нативная библиотека для работы с большими изображениями.
Возможно даже уже есть обёртка для работы с ней.

Во всех случаях придётся отказаться от Bitmap и использовать другие подходы
без доп. библиотек и массива битмапов

Не получится
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы