绘制不透明蒙版

时间:2019-08-30 13:33:15

标签: c++ direct2d

我目前在Direct2D中使用以下命令在OpacityMask中有一个8位位图:

m_pD2DContext->FillOpacityMask(
    pBitmap,
    m_pSceneBrush,
    D2D1_OPACITY_MASK_CONTENT_TEXT_NATURAL,
    &destRect);

其中m_pSceneBrush是SolidColorBrush

一切正常,但是位图中的像素(颜色)变暗(位图是在外部生成的,对此我没有影响。)

我想使OpacityMask更加明亮,这可能吗? (以及如何...)

我尝试使用效果,但由于GetOutput返回ID2D1Image,因此无法使其正常工作,并且需要使用“ FillOpacityMask”而不是“ DrawBitmap”进行绘制。 如果我使用DrawBitmap绘制效果,则结果是非常暗的图像(alpha可以)

伪代码:(不知道这是否适合使用)

ID2D1Effect* linearTransferEffect;
m_pD2DContext->CreateEffect(CLSID_D2D1LinearTransfer, &linearTransferEffect);

linearTransferEffect->SetInput(0, pBitmap);
linearTransferEffect->SetValue(D2D1_LINEARTRANSFER_PROP_ALPHA_Y_INTERCEPT, -4.0f);
linearTransferEffect->SetValue(D2D1_LINEARTRANSFER_PROP_ALPHA_SLOPE, 5.0f);

_Outptr_ ID2D1Image* outputImage = nullptr;
linearTransferEffect->GetOutput(&outputImage);

//m_pD2DContext->DrawImage(linearTransferEffect);

linearTransferEffect->Release();

0 个答案:

没有答案