Если важна скорость, не надо.
Звучит так, будто вы пытаетесь инкапсулировать или абстрагировать тип пикселя с помощью ОО-технологий или чего-то подобного. Это может добавить дополнительный уровень косвенности для каждого пиксельного доступа, снижая вашу производительность.
Если вы вызываете staight для функции вместо указателя на одну (например, делегат, переопределенный метод, функтор), это все равно может быть быстрее для ЦП, но если вы выполняете вызовы функций вообще, пересмотрите; это все еще дополнительная работа, и если вы сможете вложить все во внешний цикл FOR, это будет выглядеть уродливо, а снобы функционального программирования будут насмехаться над вами, помните, что это не большое LOB-приложение, которое будет сложно поддерживать. Вот почему инженеры все еще могут отлично поддерживать 30-летний код быстрого задания, проблемному пространству не нужно ничего более умного (однако обычно их проблемы сами нуждаются в чем-то более умном, чем я!)
Лучше всего реализовать простые вещи (например, пороговое значение или изменение размера), оптимизированные для каждого типа изображения, если вам нужна скорость. Вы также можете исследовать матрицу преобразования и посмотреть, сможете ли вы выполнить свою работу таким образом. Таким образом, вы можете написать только 2 алгоритма преобразования (ч / б) и, используя похожую (или одинаковую) матрицу, сделать то же самое для обоих типов изображений.
Следовательно, достижение главной цели абстракции в любом случае - плавное повторное использование, разделение интересов. И скорость загрузки (но, надеюсь, не перезагрузка!) Удачи