GDI+想实现图层合并功能,y轴反向,两个Bitmap合并,怎么结果y轴相反?

想实现图层合并功能,在内存中生成两个Bitmap对象bmp1、bmp2,及相应的Graphics对象g1、g2,y轴均是反向的,分别用g1和g2绘图,然后把bmp2的图像绘制到bmp1上,实现图层合并功能,但bmp1上会制的图像形状都正确,bmp2上绘制的图像却是y轴向下的,是什么原因?
void CTestView::OnDraw(CDC* pDC)
{
CTestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc) return;

CRect rc;
GetClientRect(&rc);
INT w = rc.Width();
INT h = rc.Height();

Bitmap bmp1(w, h);
Graphics g1(&bmp1);
g1.MultiplyTransform(&Matrix(1, 0, 0, -1, 0, 0));//y反向
g1.TranslateTransform(0, -h);//左下角为原点
Pen pen1(Color(255,255,0,0), 5);// 红色线段
g1.DrawLine(&pen1, 0.0f,0.0f, 200.0f, 200.0f);

Bitmap bmp2(w, h);
Graphics g2(&bmp2);
g2.MultiplyTransform(&Matrix(1, 0, 0, -1, 0, 0));//y反向
g2.TranslateTransform(0, -h);//左下角为原点
Pen pen2(Color(255,0,0,255), 5); // 蓝色线段
g2.DrawLine(&pen2, 100.0f, 0.0f, 300.0f, 200.0f);//与bmp1直线比,向右漂移100

g1.DrawImage(&bmp2, 0, 0);//把bmp2绘制到bmp1上,实现图层合并功能

// 显示合并后的图像。
// 理想是在左下角实现红色线和蓝色线平行的,但是结果却是蓝色线显示在了左上角向右平移100的位置,
// 也即是bmp2没有实现y轴反向,坐标原点仍然在左上角
Graphics g(pDC->m_hDC);  
CachedBitmap DestBMP1(&bmp1, &g);
g.DrawCachedBitmap(&DestBMP1, 0, 0);

// 但是重复上面的过程,就可以实现两条直线平行的效果。但这种方法不是想要的。
//CachedBitmap DestBMP2(&bmp2, &g);
//g.DrawCachedBitmap(&DestBMP2, 0, 0);
// 请问是什么原因,蓝色线绘制在左上角了?图层合并的功能如何实现?谢谢
}

// 利用容器,实现区域变换,可以实现图层合并。不知道上面的为何出现bmp2在bmp1上是y轴方向相反的?
RectF R(0,0,w,h);
Gdiplus::RectF dest(R.X, R.GetBottom(), R.Width, -R.Height);
Gdiplus::GraphicsContainer container = g1.BeginContainer(dest, R, Gdiplus::UnitPixel);// :UnitPoint);
g1.DrawImage(&bmp2,0,0);
g1.EndContainer(container);

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答


本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。


因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。