【问题标题】:Direct2d duplicate/stretch 1px imageDirect2d 复制/拉伸 1px 图像
【发布时间】:2017-09-24 13:34:24
【问题描述】:

如果我有一个 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));
        }
    }

【问题讨论】:

    标签: c++ directx direct2d


    【解决方案1】:

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

    您还可以将图像渲染到D2D1Bitmap 并将其绘制为位图,DrawBitmap 方法具有更多参数,可让您通过拉伸将位图的任何部分绘制到目标设备的任何部分。

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

    【讨论】:

      猜你喜欢
      • 2014-03-29
      • 1970-01-01
      • 2012-09-09
      • 1970-01-01
      • 1970-01-01
      • 2013-08-15
      • 2012-12-20
      • 2013-10-28
      相关资源
      最近更新 更多