Direct2d复制/拉伸1px图像

时间:2017-04-26 23:29:57

标签: c++ directx direct2d

如果我有一张1px厚的图像我将如何重复它以使它变大,或者我将如何拉伸它。

因为您可以看到我的代码不是最好的循环DrawImage

    colorMatrixEffect->SetInput(0, texture); //texture = ID2D1Bitmap*
    D2D1_MATRIX_5X4_F matrix = D2D1::Matrix5x4F(color->r, 0, 0, 0, 0, color->g, 0, 0, 0, 0, color->b, 0, 0, 0, 0, 1, 0, 0, 0, 0);
    colorMatrixEffect->SetValue(D2D1_COLORMATRIX_PROP_COLOR_MATRIX, matrix);

    if (rect.right == 0)
    {
        device_context_d2d1->DrawImage(colorMatrixEffect.get(),
            D2D1::Point2F(newRect.left + offsetX, newRect.top + offsetY));
    }
    else
    {
        for (int i = 0; i < static_cast<int>(newRect.right); i++)
        {
            device_context_d2d1->DrawImage(colorMatrixEffect.get(),
                D2D1::Point2F(newRect.left + offsetX + i, newRect.top + offsetY));
        }
    }

1 个答案:

答案 0 :(得分:0)

要拉伸图像,您可以使用缩放转换。

您还可以将图像渲染为D2D1Bitmap并将其绘制为位图,其中包含更多参数的DrawBitmap方法,允许您将位图的任何部分绘制到目标设备的任何部分拉伸。

要绘制重复的图案,您可以使用CreateBitmapBrush / CreateImageBrush方法创建位图或图像画笔,并将extendMode*属性设置为D2D1_EXTEND_MODE_WRAP值,然后使用此方法填充所需的形状刷。