【发布时间】:2019-11-07 22:39:15
【问题描述】:
我按照这个例子创建了一个 Direct2D 应用程序:https://github.com/microsoft/Windows-classic-samples/tree/master/Samples/Win7Samples/multimedia/Direct2D/SimpleDirect2DApplication
我设法在应用程序窗口中显示位图,并且在重新缩放窗口时位图也会重新缩放。但现在我想在位图上应用效果,我的问题来了。效果是这样应用的
hr = m_pRenderTarget->QueryInterface( __uuidof(ID2D1DeviceContext), (void**)&m_pDeviceContext );
m_pDeviceContext->CreateEffect( CLSID_D2D1GammaTransfer, &gammaTransferEffect );
gammaTransferEffect->SetInput( 0, m_pBitmap );
gammaTransferEffect->SetValue( D2D1_GAMMATRANSFER_PROP_RED_AMPLITUDE, 4.0f );
问题是应用效果后,图像数据现在是ID2D1Effect的格式。这可以像这样用DrawImage 绘制:
m_pDeviceContext->DrawImage(gammaTransferEffect);
但我在函数DrawBitmap 中使用destinationRectangle 进行了重新缩放,并且在DrawImage 中没有与destinationRectangle 等效的功能。
m_pDeviceContext->DrawBitmap(
m_pBitmap,
D2D1::RectF(
0,
0,
renderTargetSize.width,
renderTargetSize.height),
1.0f,
D2D1_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR
);
那么在重新缩放渲染目标时应用效果后如何重新缩放位图?我对此有一些想法,但没有一个能引导我找到解决方案。
- 重新调整设备上下文。我没有为 rendert 目标找到类似 Resize 的方法。
- 从效果输出中创建一个bitmap 以再次使用DrawBitmap。我发现不可能这样做。
- 在对位图应用效果之前重新缩放位图。我没有办法做到这一点。
有人知道这里有什么解决方案吗?
【问题讨论】: