想实现图层合并功能,在内存中生成两个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);
// 请问是什么原因,蓝色线绘制在左上角了?图层合并的功能如何实现?谢谢
}