Страницы

Поиск по вопросам

воскресенье, 7 апреля 2019 г.

Как в C# конвертировать изображение произвольного формата в матрицу?

Можно ли создать Int24 (24-битовый тип) в C#?
Основная задача:
Залить каждую отдельную белую область на бинарном изображении уникальным цветом color формата Format24bppRgb (color++ для каждой очередной области). Получить полный список таких объектов, состоящих из конечного набора пикселей.


Ответ

Вы подошли к задаче не с той стороны. Вы, видимо, пытаетесь сделать 24х-битный тип данных чтобы расположить его в массиве, который повторит по структуре картинку. Но в C# так сделать затруднительно.
Вместо этого, можно сделать отдельный класс с индексатором, который будет выглядеть снаружи как массив - а внутри будет сам правильно раскладывать цвета пикселей по байтам:
public class BitmapAccessor { private byte[] scan0; // Или любое другое хранилище private int stride; // (3 * width + 3) / 4 * 4. Ну или можно взять это число из BitmapData.Stride
// ...
public Color this[int x, int y] { get { var index = 3 * x + stride * y; return Color.FromArgb(scan0[index], scan0[index+1], scan0[index+2]); // точный формат не помню, возможно аргументы надо поменять местами } set { var index = 3 * x + stride * y; scan0[index] = value.R; scan0[index+1] = value.G; scan0[index+2] = value.B; } } }

Комментариев нет:

Отправить комментарий