reckfellENGINE

Bitmap

Двумерная битовая маска: прозрачность, контуры и морфологические операции.

На этой странице
class BitmapReckfellSharpНаследует Resource

Bitmap хранит один бит на ячейку: это CPU-маска, а не изображение RGBA или текстура GPU. Подходит для проверки занятых пикселей, построения контуров и расширения/сужения выделения. Новый ресурс имеет размер (0, 0); перед чтением или изменением выделите размер через Create либо CreateFromImageAlpha. Координаты целочисленные: 0 ≤ x < ширина, 0 ≤ y < высота. Собственный ресурс освобождайте через Dispose.

C#
using var mask = new Bitmap();
mask.Create(new Vector2I(5, 5));
mask.SetBit(2, 2, true);
mask.GrowMask(1, new Rect2I(0, 0, 5, 5));
// mask.GetTrueBitCount() == 5

Радиус 1 добавляет четыре соседние ячейки, без диагоналей: используется круговая окрестность. Resize масштабирует значения ближайшим соседом; он не добавляет пустую рамку и не сохраняет исходные координаты занятых ячеек.

CreateFromImageAlpha сравнивает альфу после преобразования копии изображения в LA8: строго alpha > threshold. RGB не участвует в выборе; исходное изображение не изменяется. Для сжатого изображения заранее подготовьте доступное несжатое представление. ConvertToImage создаёт независимое непрозрачное L8-изображение: false становится чёрным, true белым, а не прозрачным/непрозрачным.

OpaqueToPolygons возвращает контуры в координатах пересечения rect с маской. Чтобы получить координаты всей маски, прибавьте позицию этого пересечения к вершинам. Для всего изображения используйте new Rect2I(Vector2I.Zero, mask.GetSize()). Для Sprite2D дополнительно учитывайте центрирование, смещение, масштаб и выбранный кадр; метод не создаёт готовый объект физики. Порядок контуров, обработка произвольных отверстий и пригодность любого результата для коллизии не гарантированы этим примером.

Изменения битов и размера сами не испускают Resource.Changed. Если зависимая система слушает этот сигнал, после своей законченной операции явно вызовите EmitChanged. Data — внутреннее сериализованное представление, не валидатор внешних файлов. Не подставляйте произвольные байты.

Проверены 26 CPU-сценариев в Windows headless: размер, чтение/запись, пересечение прямоугольников, масштабирование, альфа, L8, рост/эрозия, корректный перенос Data и простой контур. Это не проверка рендера, сложной топологии, коллизий или других платформ.

Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.

Конструкторы1

BitmapКонструктор
# Bitmap
C#
public Bitmap();

Создаёт собственный Resource с размером (0, 0) и без выделенных ячеек. Перед работой вызовите Create/CreateFromImageAlpha; после работы Dispose.

Свойства1

DataСвойство
# Data
C#
public Reckfell.Collections.Dictionary Data { get; set; }

Внутренний Dictionary с ключами size (Vector2I) и data (byte[]). Getter создаёт словарь со снимком битовых данных; setter сначала Create(size), затем заменяет байты без проверки их длины и хвостовых битов. Используйте только корректное представление, созданное этим runtime; повреждённое содержимое может сделать последующие операции небезопасными. Getter-словарь освобождайте после использования.

Методы13

ConvertToImageImage
# ConvertToImage
C#
public Image ConvertToImage();

Создаёт отдельный Image того же размера, L8 без mipmaps. true → белый, false → чёрный, альфа непрозрачна в обоих случаях. Не обновляет ранее созданный Image и не создаёт GPU-текстуру. Маска должна быть выделена; собственный результат освобождайте через Dispose.

Возвращает Image

Новый собственный Image, L8 без mipmaps, не Texture2D.

Createvoid
# Create
C#
public void Create(Vector2I size);

Заменяет размер и очищает все биты, включая прежнее содержимое при том же размере. Обе стороны должны быть положительными; произведение не больше Int32.MaxValue. Не испускает Changed.

Параметры
ИмяТипПо умолчанию
sizeVector2I—
size

Положительные ширина/высота в ячейках; произведение ≤ Int32.MaxValue.

CreateFromImageAlphavoid
# CreateFromImageAlpha
C#
public void CreateFromImageAlpha(Image image, float threshold = 0.1f);

Заменяет маску размером изображения. Копия Image преобразуется в LA8; бит true только при alpha/255 > threshold. Источник не изменяется, яркость RGB не влияет. Нужен непустой Image с поддерживаемым преобразованием формата.

Параметры
ИмяТипПо умолчанию
imageImage—
thresholdfloat0.1f
image

Непустое исходное Image; используется альфа преобразованной LA8-копии.

threshold

Строгий порог альфы, обычно 0…1. Равенство даёт false; сравнение после 8-битного преобразования, не по исходной float-точности. Setter не ограничивает значение диапазоном.

GetBitbool
# GetBit
C#
public bool GetBit(int x, int y);

Читает один бит по x/y. Допустимы только координаты внутри маски; выход за пределы диагностируется и возвращает false, поэтому false сам по себе не доказывает корректность координат.

Параметры
ИмяТипПо умолчанию
xint—
yint—
x

Столбец: 0 ≤ x < GetSize().X.

y

Строка: 0 ≤ y < GetSize().Y.

Возвращает bool

Значение бита; false также является fallback при диагностике неверных координат.

GetBitvbool
# GetBitv
C#
public bool GetBitv(Vector2I position);

То же чтение, что GetBit, с координатами Vector2I. Не выполняет обрезку или циклическое отображение координат.

Параметры
ИмяТипПо умолчанию
positionVector2I—
position

Координаты ячейки внутри маски, не мировая позиция или UV.

Возвращает bool

Значение бита; false также возвращается при диагностике неверных координат.

GetSizeVector2I
# GetSize
C#
public Vector2I GetSize();

Возвращает ширину и высоту в ячейках. Новый ресурс без Create имеет размер (0, 0).

Возвращает Vector2I

Vector2I ширины и высоты.

GetTrueBitCountint
# GetTrueBitCount
C#
public int GetTrueBitCount();

Считает установленные биты. Для корректного представления это число занятых ячеек. Реализация считает все байты, включая хвостовые биты последнего байта: произвольный Data может нарушить этот смысл.

Возвращает int

Число установленных битов хранилища; для корректной маски равно числу true-ячеек.

GrowMaskvoid
# GrowMask
C#
public void GrowMask(int pixels, Rect2I rect);

Положительный pixels расширяет true-области, отрицательный сужает, 0 ничего не меняет. Круговая окрестность читается из исходного снимка, без каскадного роста внутри вызова. При эрозии пространство вне rect считается false; ячейки вне rect не меняются. Передавайте rect внутри маски и разумный радиус: большой радиус дорог, крайние int не поддержаны этим обзором.

Параметры
ИмяТипПо умолчанию
pixelsint—
rectRect2I—
pixels

Целочисленный радиус в ячейках: плюс расширяет, минус сужает, 0 пропускает операцию. Избегайте крайних int и больших радиусов.

rect

Область внутри маски с неотрицательными размерами; снаружи неё значения сохраняются, но при эрозии её граница считается пустой.

OpaqueToPolygonsReckfell.Collections.Array<Vector2[]>
# OpaqueToPolygons
C#
public Reckfell.Collections.Array<Vector2[]> OpaqueToPolygons(Rect2I rect, float epsilon = 2f);

Ищет контуры true-ячеек в пересечении rect с маской методом marching squares, затем упрощает RDP. Вершины относительны позиции пересечения, не исходной маске. Пустая область даёт пустой массив; контуры с менее чем тремя вершинами пропускаются. Для контуров от 9 вершин epsilon ограничивается диапазоном 0…половина меньшей стороны области; меньшие обходят RDP. Результат не создаёт коллизию автоматически.

Параметры
ИмяТипПо умолчанию
rectRect2I—
epsilonfloat2f
rect

Прямоугольник в координатах маски с неотрицательными размерами; обрезается границами маски, конец исключён.

epsilon

Допуск упрощения в единицах маски, не доля и не мировой масштаб. Меньше обычно сохраняет больше деталей; RDP применяется не ко всем коротким контурам.

Возвращает Reckfell.Collections.Array<Vector2[]>

Array<Vector2[]> контуров; вершины относительны обрезанной области. Это контейнер результата, не Resource с коллизией.

Resizevoid
# Resize
C#
public void Resize(Vector2I newSize);

Масштабирует маску ближайшим соседом: исходная ячейка выбирается усечением xoldWidth/newWidth и yoldHeight/newHeight. Это не добавление пустых строк/столбцов. Тот же размер ничего не меняет; используйте положительные стороны. Нулевой размер не является безопасным способом очистки.

Параметры
ИмяТипПо умолчанию
newSizeVector2I—
newSize

Положительные целевые размеры для масштабирования, не количество добавляемых ячеек.

SetBitvoid
# SetBit
C#
public void SetBit(int x, int y, bool bit);

Устанавливает или сбрасывает ячейку. Координаты должны быть внутри маски; неверные диагностируются без записи. Resource.Changed автоматически не испускается.

Параметры
ИмяТипПо умолчанию
xint—
yint—
bitbool—
x

Столбец: 0 ≤ x < GetSize().X.

y

Строка: 0 ≤ y < GetSize().Y.

bit

Новое значение: true занято, false пусто.

SetBitRectvoid
# SetBitRect
C#
public void SetBitRect(Rect2I rect, bool bit);

Заполняет пересечение rect с границами маски значением bit. Правая/нижняя границы исключены; непересекающаяся область ничего не меняет. Это заполнение, а не переключение битов.

Параметры
ИмяТипПо умолчанию
rectRect2I—
bitbool—
rect

Прямоугольник в координатах маски с неотрицательными размерами; обрезается границами маски, конец исключён.

bit

Новое значение: true занято, false пусто.

SetBitvvoid
# SetBitv
C#
public void SetBitv(Vector2I position, bool bit);

То же изменение, что SetBit, с координатами Vector2I. Не меняет размер маски.

Параметры
ИмяТипПо умолчанию
positionVector2I—
bitbool—
position

Координаты ячейки внутри маски, не мировая позиция или UV.

bit

Новое значение: true занято, false пусто.

Документация Reckfell EngineНаверх ↑
БЫСТРЫЙ ПЕРЕХОДНачало работыEntity и иерархияC# & .NET 10Сцены и префабы
Руководства и полный API Reckfell K
reckfellENGINE
RECKFELL ACCOUNT

Вход в аккаунт

Войдите в аккаунт Reckfell.

Один аккаунт для всей платформы Reckfell.