Можно ли создать 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;
}
}
}
Комментариев нет:
Отправить комментарий