Сдвиг цветовых каналов без отрисовки каждого канала отдельно?

Я хочу нарисовать кадрами Direct2D, цветовые каналы которых смещены по оси X. Я знаю, что мог бы установить режим композиции на D2D1_COMPOSITE_MODE_PLUS и нарисуйте каждый цветной канал отдельно, чтобы я мог сместить их вручную. Но я хочу знать, есть ли другой (возможно, более эффективный) способ рисования фигур со смещенными цветовыми каналами?

Я приложил изображение, которое показывает, что я имею в виду.
(Я предлагаю открыть это изображение в новой вкладке и увеличить, чтобы увидеть эффект лучше)
введите описание изображения здесь

1

Решение

Обычно это делается для выборки 3 пикселей из входного изображения за раз, каждый из которых отделен некоторой величиной в направлении x, и объединяет красный от одного, зеленый от другого и синий от третьего. К сожалению, я совсем не знаю DX2D, поэтому я не знаю специфики его работы там. Но если у вас есть растровое изображение и указатель на пиксели, вы можете просто вычесть один (или несколько) пикселей из этого указателя, добавить один или несколько пикселей к этому указателю и прочитать данные из этих областей памяти (следя за тем, чтобы учитывать изображение края). Затем извлеките каналы из значений, которые вы прочитали. Например:

RGBA8* pixel = baseAddressOfImage;
RGBA8* pixelMinus1 = pixel - 1;
RGBA8* pixelPuls1 = pixel + 1;
for each pixel in the output
{
result.red = pixelMinus1->red;
result.green = pixel->green;
result.blue = pixelPlus1->blue;
pixelMinus1++;
pixel++;
pixelPlus1++;
}

Обратите внимание, что вы можете добавить или вычесть более 1, но, как уже упоминалось выше, вы должны обрабатывать то, что происходит на краях в этих случаях.

2

Другие решения


По вопросам рекламы [email protected]