Я создал приложение 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);
Но я произвел изменение масштаба с помощью destinationRectangle
в функции DrawBitmap , и нет эквивалента destinationRectangle
in DrawImage
.
m_pDeviceContext->DrawBitmap(
m_pBitmap,
D2D1::RectF(
0,
0,
renderTargetSize.width,
renderTargetSize.height),
1.0f,
D2D1_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR
);
Итак, как я могу изменить масштаб растрового изображения после применения эффекта при изменении масштаба цели рендеринга? У меня были некоторые идеи по этому поводу, но ни одна из них не привела меня к решению.
- Масштабируйте контекст устройства. Я не нашел метод, подобный Resize для цели rendert.
- Создайте bitmap из вывода эффектов, чтобы снова использовать DrawBitmap. Я не нашел возможности сделать это.
- Масштабирование растрового изображения перед применением к нему эффектов. Я не нашел способа сделать это.
Кто-нибудь знает, что может быть решением здесь?