移动颜色通道而不单独绘制每个通道?

时间:2014-10-26 22:12:02

标签: c++ rgb direct2d color-channel

我想用Direct2D帧绘制颜色通道在x轴上移位。我知道我可以将合成模式设置为D2D1_COMPOSITE_MODE_PLUS并分别绘制每个颜色通道,以便我可以手动移动它们。但我想知道是否有另一种(可能更有效)的方式用移动的颜色通道绘制形状?

我附上了一张显示我的意思的图片。 (我建议在新标签中打开此图像并放大以更好地查看效果) enter image description here

1 个答案:

答案 0 :(得分:2)

通常这样做的方法是一次从输入图像中采样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,但如上所述,您必须处理在这些情况下边缘发生的情况。