渲染时水平翻转ID2D1位图

问题描述 投票:0回答:1

我有一个使用ID2D1HwndRenderTarget :: DrawBitmap()显示的Direct2D ID2D1Bitmap。我正在尝试水平翻转图像。

我读过this article,它解释了如何翻转从文件中读取的图像,但是我具有ID2D1Bitmap。

我看到了有关使用IWICBitmapFlipRotator的参考,但是IWICBitmapFlipRotator::Initialize()采用IWICBitmapSource而不是ID2D1Bitmap。 (我很确定第一次加载图像时,在IWICFormatConverter中有一个WIC位图,但我无法为加载的〜100张图像保存WIC对象。而且我只需要偶尔翻转图像。) >

[我看到了使用变换矩阵的示例,它看起来很有希望,并且是一个很好的选择(我已经应用了D2D1 :: Matrix3x2F :: Rotation()变换,但是当我应用此变换时,显示屏上什么也没有出现。] >

D2D1_MATRIX_3X2_F flip = D2D1::Matrix3x2F(-1, 0, 0, 1, 0, 0);
m_pTarget->SetTransform(flip);
m_pTarget->DrawBitmap(pBitmap, ...);

我已经看到了对D2D1_ORIENTATION_FLIP_HORIZONTAL的一些引用,但没有使用它的示例。

我显然是Direct2D新手。感谢您的协助!

更新:我发现上面显示的Matrix3x2F(-1,0,0,1,0,0)代码确实在渲染时确实水平翻转(又称“镜像”)图像。但是,它也会将图像向左移动,因此不可见。为了对此进行调整,我还应用了Matrix3x2F :: Translation(xShift,0)来重新定位位图。我通过基于位图的预期位置和位图宽度的卷积(又名me脚,假冒,尴尬)公式确定xShift值。我敢肯定,有一种更干净的方法来适应所需的x轴偏移,但是此解决方案有效。

我有一个使用ID2D1HwndRenderTarget :: DrawBitmap()显示的Direct2D ID2D1Bitmap。我正在尝试水平翻转图像。我读了这篇文章,解释了如何翻转读取的图像...

bitmap transformation direct2d
1个回答
0
投票

我发现上面显示的Matrix3x2F(-1,0,0,1,0,0)代码确实在渲染时确实水平翻转(又称“镜像”)图像。但是,它也会将图像向左移动,因此不可见。为了对此进行调整,我还应用了Matrix3x2F :: Translation(xShift,0)来重新定位位图。我通过基于位图的预期位置和位图宽度的卷积(又名me脚,假冒,尴尬)公式确定xShift值。我敢肯定,有一种更干净的方法来适应所需的x轴偏移,但是此解决方案有效。

© www.soinside.com 2019 - 2024. All rights reserved.