CImage类图像显示函数应用示例
在CImage 类及其常用成员函数用法详解一的示例中使用了BitBlt()成员函数来显示图像,其代码如下:
void CCImageTest1Dlg::OnBnClickedDisplayImage()
{
// TODO: 在此添加控件通知处理程序代码
Invalidate();
OnPaint();
if (!mImage.IsNull())
{
CClientDC dc(this);
mImage.BitBlt(dc.GetSafeHdc(), 20, 20, SRCCOPY);
}
else
{
MessageBox(L"还没加载图像!");
}
}
下面继续演示其它用于图像显示的成员函数的用法 。
AlphaBlend的用法示例
修改图像显示代码如下:
void CCImageTest1Dlg::OnBnClickedDisplayImage()
{
// TODO: 在此添加控件通知处理程序代码
Invalidate();
OnPaint();
if (!mImage.IsNull())
{
CClientDC dc(this);
//BitBlt
//mImage.BitBlt(dc.GetSafeHdc(), 20, 20, SRCCOPY);
// AlphaBlend
mImage.AlphaBlend(dc.GetSafeHdc(), 20, 20, 0xFF);
}
else
{
MessageBox(L"还没加载图像!");
}
}
试运行,然后点击加载图像,如下:
加载图像后,点击显示图像,结果如下:
显示图像为不透明。修改代码如下:
void CCImageTest1Dlg::OnBnClickedDisplayImage()
{
// TODO: 在此添加控件通知处理程序代码
Invalidate();
OnPaint();
if (!mImage.IsNull())
{
CClientDC dc(this);
//BitBlt
//mImage.BitBlt(dc.GetSafeHdc(), 20, 20, SRCCOPY);
// AlphaBlend
//mImage.AlphaBlend(dc.GetSafeHdc(), 20, 20, 0xFF);
mImage.AlphaBlend(dc.GetSafeHdc(), 20, 20, 0x80);
}
else
{
MessageBox(L"还没加载图像!");
}
}
试运行,加载同一张图片,显示结果如下:
图像变为半透明。AlphaBlend还有另外3个重载函数。
下面用另一个函数来显示图像,代码如下:
void CCImageTest1Dlg::OnBnClickedDisplayImage()
{
// TODO: 在此添加控件通知处理程序代码
Invalidate();
OnPaint();
if (!mImage.IsNull())
{
CClientDC dc(this);
//BitBlt
//mImage.BitBlt(dc.GetSafeHdc(), 20, 20, SRCCOPY);
// AlphaBlend
//mImage.AlphaBlend(dc.GetSafeHdc(), 20, 20, 0xFF);
//mImage.AlphaBlend(dc.GetSafeHdc(), 20, 20, 0x80);
mImage.AlphaBlend(dc.GetSafeHdc(), CPoint(20, 20), 0x80);
}
else
{
MessageBox(L"还没加载图像!");
}
}
试运行,显示同一张图像的结果如下:
下面换另一个函数来显示图像,代码如下:
void CCImageTest1Dlg::OnBnClickedDisplayImage()
{
// TODO: 在此添加控件通知处理程序代码
Invalidate();
OnPaint();
if (!mImage.IsNull())
{
CClientDC dc(this);
//BitBlt
//mImage.BitBlt(dc.GetSafeHdc(), 20, 20, SRCCOPY);
// AlphaBlend
//mImage.AlphaBlend(dc.GetSafeHdc(), 20, 20, 0xFF);//不透明,图像最清晰
//mImage.AlphaBlend(dc.GetSafeHdc(), 20, 20, 0x80);
//mImage.AlphaBlend(dc.GetSafeHdc(), CPoint(20, 20), 0x80);
mImage.AlphaBlend(dc.GetSafeHdc(),20,20,mImage.GetWidth()*2, mImage.GetHeight()*2,0,0, mImage.GetWidth(), mImage.GetHeight(),0x80);
}
else
{
MessageBox(L"还没加载图像!");
}
}
试运行,显示同一张图像的结果如下:
图像放大了一倍。下面换另一个函数来显示图像,代码如下:
void CCImageTest1Dlg::OnBnClickedDisplayImage()
{
// TODO: 在此添加控件通知处理程序代码
Invalidate();
OnPaint();
if (!mImage.IsNull())
{
CClientDC dc(this);
//BitBlt
//mImage.BitBlt(dc.GetSafeHdc(), 20, 20, SRCCOPY);
// AlphaBlend
//mImage.AlphaBlend(dc.GetSafeHdc(), 20, 20, 0xFF);//不透明,图像最清晰
//mImage.AlphaBlend(dc.GetSafeHdc(), 20, 20, 0x80);
//mImage.AlphaBlend(dc.GetSafeHdc(), CPoint(20, 20), 0x80);
//mImage.AlphaBlend(dc.GetSafeHdc(),20,20,mImage.GetWidth()*2, mImage.GetHeight()*2,0,0, mImage.GetWidth(), mImage.GetHeight(),0x80);
mImage.AlphaBlend(dc.GetSafeHdc(), CRect(20, 20, mImage.GetWidth() * 2, mImage.GetHeight() * 2), CRect(0, 0, mImage.GetWidth(), mImage.GetHeight()), 0x80);
}
else
{
MessageBox(L"还没加载图像!");
}
}
试运行,显示同一张图像的结果如下:
MaskBlt()成员函数的使用示例。
修改图像显示代码如下:
void CCImageTest1Dlg::OnBnClickedDisplayImage()
{
// TODO: 在此添加控件通知处理程序代码
Invalidate();
OnPaint();
if (!mImage.IsNull())
{
CClientDC dc(this);
//BitBlt
//mImage.BitBlt(dc.GetSafeHdc(), 20, 20, SRCCOPY);
// AlphaBlend
//mImage.AlphaBlend(dc.GetSafeHdc(), 20, 20, 0xFF);//不透明,图像最清晰
//mImage.AlphaBlend(dc.GetSafeHdc(), 20, 20, 0x80);
//mImage.AlphaBlend(dc.GetSafeHdc(), CPoint(20, 20), 0x80);
//mImage.AlphaBlend(dc.GetSafeHdc(),20,20,mImage.GetWidth()*2, mImage.GetHeight()*2,0,0, mImage.GetWidth(), mImage.GetHeight(),0x80);
//mImage.AlphaBlend(dc.GetSafeHdc(), CRect(20, 20, mImage.GetWidth() * 2, mImage.GetHeight() * 2), CRect(0, 0, mImage.GetWidth(), mImage.GetHeight()), 0x80);
//MaskBlt
CImage mskImage;
HBITMAP hbmMask;
mskImage.Load(L"c.jpeg");
if (mskImage.IsNull())
MessageBox(L"Mask image load failed!");
hbmMask = (HBITMAP)mskImage.Detach();
mImage.MaskBlt(dc.GetSafeHdc(), 0,0, mImage.GetWidth(), mImage.GetHeight(),0,0, hbmMask,0,0,0);
}
else
{
MessageBox(L"还没加载图像!");
}
}
试运行,加载图像,如下:
点击显示图像,结果如下:
修改代码如下:
void CCImageTest1Dlg::OnBnClickedDisplayImage()
{
// TODO: 在此添加控件通知处理程序代码
Invalidate();
OnPaint();
if (!mImage.IsNull())
{
CClientDC dc(this);
//BitBlt
//mImage.BitBlt(dc.GetSafeHdc(), 20, 20, SRCCOPY);
// AlphaBlend
//mImage.AlphaBlend(dc.GetSafeHdc(), 20, 20, 0xFF);//不透明,图像最清晰
//mImage.AlphaBlend(dc.GetSafeHdc(), 20, 20, 0x80);
//mImage.AlphaBlend(dc.GetSafeHdc(), CPoint(20, 20), 0x80);
//mImage.AlphaBlend(dc.GetSafeHdc(),20,20,mImage.GetWidth()*2, mImage.GetHeight()*2,0,0, mImage.GetWidth(), mImage.GetHeight(),0x80);
//mImage.AlphaBlend(dc.GetSafeHdc(), CRect(20, 20, mImage.GetWidth() * 2, mImage.GetHeight() * 2), CRect(0, 0, mImage.GetWidth(), mImage.GetHeight()), 0x80);
//MaskBlt
/*
CImage mskImage;
HBITMAP hbmMask;
mskImage.Load(L"c.jpeg");
if (mskImage.IsNull())
MessageBox(L"Mask image load failed!");
hbmMask = (HBITMAP)mskImage.Detach();
mImage.MaskBlt(dc.GetSafeHdc(), 0,0, mImage.GetWidth(), mImage.GetHeight(),0,0, hbmMask,0,0,0);
*/
mImage.MaskBlt(dc.GetSafeHdc(), 0, 0, mImage.GetWidth(), mImage.GetHeight(), 0, 0,NULL, 0, 0);
}
else
{
MessageBox(L"还没加载图像!");
}
}
试运行,加载同一张图像,点击,显示图像,结果如下:
说明该函数也可以用于正常显示图像。MaskBlt有几个重载函数,下面逐一演示一下,修改代码如下:
void CCImageTest1Dlg::OnBnClickedDisplayImage()
{
// TODO: 在此添加控件通知处理程序代码
Invalidate();
OnPaint();
if (!mImage.IsNull())
{
CClientDC dc(this);
//BitBlt
//mImage.BitBlt(dc.GetSafeHdc(), 20, 20, SRCCOPY);
// AlphaBlend
//mImage.AlphaBlend(dc.GetSafeHdc(), 20, 20, 0xFF);//不透明,图像最清晰
//mImage.AlphaBlend(dc.GetSafeHdc(), 20, 20, 0x80);
//mImage.AlphaBlend(dc.GetSafeHdc(), CPoint(20, 20), 0x80);
//mImage.AlphaBlend(dc.GetSafeHdc(),20,20,mImage.GetWidth()*2, mImage.GetHeight()*2,0,0, mImage.GetWidth(), mImage.GetHeight(),0x80);
//mImage.AlphaBlend(dc.GetSafeHdc(), CRect(20, 20, mImage.GetWidth() * 2, mImage.GetHeight() * 2), CRect(0, 0, mImage.GetWidth(), mImage.GetHeight()), 0x80);
//MaskBlt
/*
CImage mskImage;
HBITMAP hbmMask;
mskImage.Load(L"c.jpeg");
if (mskImage.IsNull())
MessageBox(L"Mask image load failed!");
hbmMask = (HBITMAP)mskImage.Detach();
mImage.MaskBlt(dc.GetSafeHdc(), 0,0, mImage.GetWidth(), mImage.GetHeight(),0,0, hbmMask,0,0,0);
*/
//mImage.MaskBlt(dc.GetSafeHdc(), 0, 0, mImage.GetWidth(), mImage.GetHeight(), 0, 0,NULL, 0, 0);
mImage.MaskBlt(dc.GetSafeHdc(), CRect(0, 0, mImage.GetWidth(), mImage.GetHeight()), CPoint(0, 0), NULL, CPoint(0, 0));
}
else
{
MessageBox(L"还没加载图像!");
}
}
试运行,加载图像:
显示图像,结果如下:
再修改代码,如下:
void CCImageTest1Dlg::OnBnClickedDisplayImage()
{
// TODO: 在此添加控件通知处理程序代码
Invalidate();
OnPaint();
if (!mImage.IsNull())
{
CClientDC dc(this);
//BitBlt
//mImage.BitBlt(dc.GetSafeHdc(), 20, 20, SRCCOPY);
// AlphaBlend
//mImage.AlphaBlend(dc.GetSafeHdc(), 20, 20, 0xFF);//不透明,图像最清晰
//mImage.AlphaBlend(dc.GetSafeHdc(), 20, 20, 0x80);
//mImage.AlphaBlend(dc.GetSafeHdc(), CPoint(20, 20), 0x80);
//mImage.AlphaBlend(dc.GetSafeHdc(),20,20,mImage.GetWidth()*2, mImage.GetHeight()*2,0,0, mImage.GetWidth(), mImage.GetHeight(),0x80);
//mImage.AlphaBlend(dc.GetSafeHdc(), CRect(20, 20, mImage.GetWidth() * 2, mImage.GetHeight() * 2), CRect(0, 0, mImage.GetWidth(), mImage.GetHeight()), 0x80);
//MaskBlt
/*
CImage mskImage;
HBITMAP hbmMask;
mskImage.Load(L"c.jpeg");
if (mskImage.IsNull())
MessageBox(L"Mask image load failed!");
hbmMask = (HBITMAP)mskImage.Detach();
mImage.MaskBlt(dc.GetSafeHdc(), 0,0, mImage.GetWidth(), mImage.GetHeight(),0,0, hbmMask,0,0,0);
*/
//mImage.MaskBlt(dc.GetSafeHdc(), 0, 0, mImage.GetWidth(), mImage.GetHeight(), 0, 0,NULL, 0, 0);
//mImage.MaskBlt(dc.GetSafeHdc(), CRect(0, 0, mImage.GetWidth(), mImage.GetHeight()), CPoint(0, 0), NULL, CPoint(0, 0));
mImage.MaskBlt(dc.GetSafeHdc(), 0,0, NULL);
}
else
{
MessageBox(L"还没加载图像!");
}
}
试运行,加载图像:
显示图像,如下:
再修改代码,如下:
void CCImageTest1Dlg::OnBnClickedDisplayImage()
{
// TODO: 在此添加控件通知处理程序代码
Invalidate();
OnPaint();
if (!mImage.IsNull())
{
CClientDC dc(this);
//BitBlt
//mImage.BitBlt(dc.GetSafeHdc(), 20, 20, SRCCOPY);
// AlphaBlend
//mImage.AlphaBlend(dc.GetSafeHdc(), 20, 20, 0xFF);//不透明,图像最清晰
//mImage.AlphaBlend(dc.GetSafeHdc(), 20, 20, 0x80);
//mImage.AlphaBlend(dc.GetSafeHdc(), CPoint(20, 20), 0x80);
//mImage.AlphaBlend(dc.GetSafeHdc(),20,20,mImage.GetWidth()*2, mImage.GetHeight()*2,0,0, mImage.GetWidth(), mImage.GetHeight(),0x80);
//mImage.AlphaBlend(dc.GetSafeHdc(), CRect(20, 20, mImage.GetWidth() * 2, mImage.GetHeight() * 2), CRect(0, 0, mImage.GetWidth(), mImage.GetHeight()), 0x80);
//MaskBlt
/*
CImage mskImage;
HBITMAP hbmMask;
mskImage.Load(L"c.jpeg");
if (mskImage.IsNull())
MessageBox(L"Mask image load failed!");
hbmMask = (HBITMAP)mskImage.Detach();
mImage.MaskBlt(dc.GetSafeHdc(), 0,0, mImage.GetWidth(), mImage.GetHeight(),0,0, hbmMask,0,0,0);
*/
//mImage.MaskBlt(dc.GetSafeHdc(), 0, 0, mImage.GetWidth(), mImage.GetHeight(), 0, 0,NULL, 0, 0);
//mImage.MaskBlt(dc.GetSafeHdc(), CRect(0, 0, mImage.GetWidth(), mImage.GetHeight()), CPoint(0, 0), NULL, CPoint(0, 0));
//mImage.MaskBlt(dc.GetSafeHdc(), 0,0, NULL);
mImage.MaskBlt(dc.GetSafeHdc(), CPoint(0, 0), NULL);
}
else
{
MessageBox(L"还没加载图像!");
}
}
试运行,加载图像:
显示图像,结果如下:
PlgBlt()函数的用法示例
修改图像显示代码,代码如下 :
void CCImageTest1Dlg::OnBnClickedDisplayImage()
{
// TODO: 在此添加控件通知处理程序代码
Invalidate();
OnPaint();
if (!mImage.IsNull())
{
CClientDC dc(this);
//BitBlt
//mImage.BitBlt(dc.GetSafeHdc(), 20, 20, SRCCOPY);
// AlphaBlend
//mImage.AlphaBlend(dc.GetSafeHdc(), 20, 20, 0xFF);//不透明,图像最清晰
//mImage.AlphaBlend(dc.GetSafeHdc(), 20, 20, 0x80);
//mImage.AlphaBlend(dc.GetSafeHdc(), CPoint(20, 20), 0x80);
//mImage.AlphaBlend(dc.GetSafeHdc(),20,20,mImage.GetWidth()*2, mImage.GetHeight()*2,0,0, mImage.GetWidth(), mImage.GetHeight(),0x80);
//mImage.AlphaBlend(dc.GetSafeHdc(), CRect(20, 20, mImage.GetWidth() * 2, mImage.GetHeight() * 2), CRect(0, 0, mImage.GetWidth(), mImage.GetHeight()), 0x80);
//MaskBlt
/*
CImage mskImage;
HBITMAP hbmMask;
mskImage.Load(L"c.jpeg");
if (mskImage.IsNull())
MessageBox(L"Mask image load failed!");
hbmMask = (HBITMAP)mskImage.Detach();
mImage.MaskBlt(dc.GetSafeHdc(), 0,0, mImage.GetWidth(), mImage.GetHeight(),0,0, hbmMask,0,0,0);
*/
//mImage.MaskBlt(dc.GetSafeHdc(), 0, 0, mImage.GetWidth(), mImage.GetHeight(), 0, 0,NULL, 0, 0);
//mImage.MaskBlt(dc.GetSafeHdc(), CRect(0, 0, mImage.GetWidth(), mImage.GetHeight()), CPoint(0, 0), NULL, CPoint(0, 0));
//mImage.MaskBlt(dc.GetSafeHdc(), 0,0, NULL);
//mImage.MaskBlt(dc.GetSafeHdc(), CPoint(0, 0), NULL);
//PlgBlt
CPoint point[3];
point[0] = CPoint(0, 0);
point[1] = CPoint(mImage.GetWidth(),0);
point[2] = CPoint(0, mImage.GetHeight());
mImage.PlgBlt(dc.GetSafeHdc(), point);
}
else
{
MessageBox(L"还没加载图像!");
}
}
试运行,加载图像:
显示图像,结果如下:
PlgBlt()函数,有几个重载函数,下面列出其示例代码
void CCImageTest1Dlg::OnBnClickedDisplayImage()
{
// TODO: 在此添加控件通知处理程序代码
Invalidate();
OnPaint();
if (!mImage.IsNull())
{
CClientDC dc(this);
//BitBlt
//mImage.BitBlt(dc.GetSafeHdc(), 20, 20, SRCCOPY);
// AlphaBlend
//mImage.AlphaBlend(dc.GetSafeHdc(), 20, 20, 0xFF);//不透明,图像最清晰
//mImage.AlphaBlend(dc.GetSafeHdc(), 20, 20, 0x80);
//mImage.AlphaBlend(dc.GetSafeHdc(), CPoint(20, 20), 0x80);
//mImage.AlphaBlend(dc.GetSafeHdc(),20,20,mImage.GetWidth()*2, mImage.GetHeight()*2,0,0, mImage.GetWidth(), mImage.GetHeight(),0x80);
//mImage.AlphaBlend(dc.GetSafeHdc(), CRect(20, 20, mImage.GetWidth() * 2, mImage.GetHeight() * 2), CRect(0, 0, mImage.GetWidth(), mImage.GetHeight()), 0x80);
//MaskBlt
/*
CImage mskImage;
HBITMAP hbmMask;
mskImage.Load(L"c.jpeg");
if (mskImage.IsNull())
MessageBox(L"Mask image load failed!");
hbmMask = (HBITMAP)mskImage.Detach();
mImage.MaskBlt(dc.GetSafeHdc(), 0,0, mImage.GetWidth(), mImage.GetHeight(),0,0, hbmMask,0,0,0);
*/
//mImage.MaskBlt(dc.GetSafeHdc(), 0, 0, mImage.GetWidth(), mImage.GetHeight(), 0, 0,NULL, 0, 0);
//mImage.MaskBlt(dc.GetSafeHdc(), CRect(0, 0, mImage.GetWidth(), mImage.GetHeight()), CPoint(0, 0), NULL, CPoint(0, 0));
//mImage.MaskBlt(dc.GetSafeHdc(), 0,0, NULL);
//mImage.MaskBlt(dc.GetSafeHdc(), CPoint(0, 0), NULL);
//PlgBlt
CPoint point[3];
point[0] = CPoint(0, 0);
point[1] = CPoint(mImage.GetWidth(),0);
point[2] = CPoint(0, mImage.GetHeight());
//mImage.PlgBlt(dc.GetSafeHdc(), point);
//mImage.PlgBlt(dc.GetSafeHdc(), point,0,0, mImage.GetWidth(), mImage.GetHeight());
mImage.PlgBlt(dc.GetSafeHdc(), point, CRect(0, 0, mImage.GetWidth(), mImage.GetHeight()));
}
else
{
MessageBox(L"还没加载图像!");
}
}
StretchBlt ()函数用法示例
StretchBlt ()函数有几个重载函数,这里列出其示例代码,先注释起来,留一个做调试演示,代码如下:
void CCImageTest1Dlg::OnBnClickedDisplayImage()
{
// TODO: 在此添加控件通知处理程序代码
Invalidate();
OnPaint();
if (!mImage.IsNull())
{
CClientDC dc(this);
//BitBlt
//mImage.BitBlt(dc.GetSafeHdc(), 20, 20, SRCCOPY);
// AlphaBlend
//mImage.AlphaBlend(dc.GetSafeHdc(), 20, 20, 0xFF);//不透明,图像最清晰
//mImage.AlphaBlend(dc.GetSafeHdc(), 20, 20, 0x80);
//mImage.AlphaBlend(dc.GetSafeHdc(), CPoint(20, 20), 0x80);
//mImage.AlphaBlend(dc.GetSafeHdc(),20,20,mImage.GetWidth()*2, mImage.GetHeight()*2,0,0, mImage.GetWidth(), mImage.GetHeight(),0x80);
//mImage.AlphaBlend(dc.GetSafeHdc(), CRect(20, 20, mImage.GetWidth() * 2, mImage.GetHeight() * 2), CRect(0, 0, mImage.GetWidth(), mImage.GetHeight()), 0x80);
//MaskBlt
/*
CImage mskImage;
HBITMAP hbmMask;
mskImage.Load(L"c.jpeg");
if (mskImage.IsNull())
MessageBox(L"Mask image load failed!");
hbmMask = (HBITMAP)mskImage.Detach();
mImage.MaskBlt(dc.GetSafeHdc(), 0,0, mImage.GetWidth(), mImage.GetHeight(),0,0, hbmMask,0,0,0);
*/
//mImage.MaskBlt(dc.GetSafeHdc(), 0, 0, mImage.GetWidth(), mImage.GetHeight(), 0, 0,NULL, 0, 0);
//mImage.MaskBlt(dc.GetSafeHdc(), CRect(0, 0, mImage.GetWidth(), mImage.GetHeight()), CPoint(0, 0), NULL, CPoint(0, 0));
//mImage.MaskBlt(dc.GetSafeHdc(), 0,0, NULL);
//mImage.MaskBlt(dc.GetSafeHdc(), CPoint(0, 0), NULL);
//PlgBlt
CPoint point[3];
point[0] = CPoint(0, 0);
point[1] = CPoint(mImage.GetWidth(),0);
point[2] = CPoint(0, mImage.GetHeight());
//mImage.PlgBlt(dc.GetSafeHdc(), point);
//mImage.PlgBlt(dc.GetSafeHdc(), point,0,0, mImage.GetWidth(), mImage.GetHeight());
//mImage.PlgBlt(dc.GetSafeHdc(), point, CRect(0, 0, mImage.GetWidth(), mImage.GetHeight()));
//StretchBlt
//mImage.StretchBlt(dc.GetSafeHdc(), 0,0, mImage.GetWidth()*2, mImage.GetHeight()*2);
//mImage.StretchBlt(dc.GetSafeHdc(), CRect(0, 0, mImage.GetWidth() * 2, mImage.GetHeight() * 2));
mImage.StretchBlt(dc.GetSafeHdc(), 0,0, mImage.GetWidth()* 2, mImage.GetHeight() * 2,0, 0, mImage.GetWidth() , mImage.GetHeight());
}
else
{
MessageBox(L"还没加载图像!");
}
}
试运行,加载图像:
显示图像,结果如下:
TransparentBlt()函数示例
修改图像显示代码,代码如下:
void CCImageTest1Dlg::OnBnClickedDisplayImage()
{
// TODO: 在此添加控件通知处理程序代码
Invalidate();
OnPaint();
if (!mImage.IsNull())
{
CClientDC dc(this);
//BitBlt
//mImage.BitBlt(dc.GetSafeHdc(), 20, 20, SRCCOPY);
// AlphaBlend
//mImage.AlphaBlend(dc.GetSafeHdc(), 20, 20, 0xFF);//不透明,图像最清晰
//mImage.AlphaBlend(dc.GetSafeHdc(), 20, 20, 0x80);
//mImage.AlphaBlend(dc.GetSafeHdc(), CPoint(20, 20), 0x80);
//mImage.AlphaBlend(dc.GetSafeHdc(),20,20,mImage.GetWidth()*2, mImage.GetHeight()*2,0,0, mImage.GetWidth(), mImage.GetHeight(),0x80);
//mImage.AlphaBlend(dc.GetSafeHdc(), CRect(20, 20, mImage.GetWidth() * 2, mImage.GetHeight() * 2), CRect(0, 0, mImage.GetWidth(), mImage.GetHeight()), 0x80);
//MaskBlt
/*
CImage mskImage;
HBITMAP hbmMask;
mskImage.Load(L"c.jpeg");
if (mskImage.IsNull())
MessageBox(L"Mask image load failed!");
hbmMask = (HBITMAP)mskImage.Detach();
mImage.MaskBlt(dc.GetSafeHdc(), 0,0, mImage.GetWidth(), mImage.GetHeight(),0,0, hbmMask,0,0,0);
*/
//mImage.MaskBlt(dc.GetSafeHdc(), 0, 0, mImage.GetWidth(), mImage.GetHeight(), 0, 0,NULL, 0, 0);
//mImage.MaskBlt(dc.GetSafeHdc(), CRect(0, 0, mImage.GetWidth(), mImage.GetHeight()), CPoint(0, 0), NULL, CPoint(0, 0));
//mImage.MaskBlt(dc.GetSafeHdc(), 0,0, NULL);
//mImage.MaskBlt(dc.GetSafeHdc(), CPoint(0, 0), NULL);
//PlgBlt
/*
CPoint point[3];
point[0] = CPoint(0, 0);
point[1] = CPoint(mImage.GetWidth(),0);
point[2] = CPoint(0, mImage.GetHeight());
*/
//mImage.PlgBlt(dc.GetSafeHdc(), point);
//mImage.PlgBlt(dc.GetSafeHdc(), point,0,0, mImage.GetWidth(), mImage.GetHeight());
//mImage.PlgBlt(dc.GetSafeHdc(), point, CRect(0, 0, mImage.GetWidth(), mImage.GetHeight()));
//StretchBlt
//mImage.StretchBlt(dc.GetSafeHdc(), 0,0, mImage.GetWidth()*2, mImage.GetHeight()*2);
//mImage.StretchBlt(dc.GetSafeHdc(), CRect(0, 0, mImage.GetWidth() * 2, mImage.GetHeight() * 2));
//mImage.StretchBlt(dc.GetSafeHdc(), 0,0, mImage.GetWidth() * 2, mImage.GetHeight() * 2,0, 0, mImage.GetWidth(), mImage.GetHeight());
//TransparentBlt
mImage.TransparentBlt(dc.GetSafeHdc(), 0, 0, mImage.GetWidth() * 2, mImage.GetHeight() * 2, 0x000000);//将黑色设为透明色
}
else
{
MessageBox(L"还没加载图像!");
}
}
试运行,加载图像:
显示图像,结果如下:
TransparentBlt()函数有几个重载函数,下面列出其用法示例代码,就不再做演示,代码如下:
void CCImageTest1Dlg::OnBnClickedDisplayImage()
{
// TODO: 在此添加控件通知处理程序代码
Invalidate();
OnPaint();
if (!mImage.IsNull())
{
CClientDC dc(this);
//BitBlt
//mImage.BitBlt(dc.GetSafeHdc(), 20, 20, SRCCOPY);
// AlphaBlend
//mImage.AlphaBlend(dc.GetSafeHdc(), 20, 20, 0xFF);//不透明,图像最清晰
//mImage.AlphaBlend(dc.GetSafeHdc(), 20, 20, 0x80);
//mImage.AlphaBlend(dc.GetSafeHdc(), CPoint(20, 20), 0x80);
//mImage.AlphaBlend(dc.GetSafeHdc(),20,20,mImage.GetWidth()*2, mImage.GetHeight()*2,0,0, mImage.GetWidth(), mImage.GetHeight(),0x80);
//mImage.AlphaBlend(dc.GetSafeHdc(), CRect(20, 20, mImage.GetWidth() * 2, mImage.GetHeight() * 2), CRect(0, 0, mImage.GetWidth(), mImage.GetHeight()), 0x80);
//MaskBlt
/*
CImage mskImage;
HBITMAP hbmMask;
mskImage.Load(L"c.jpeg");
if (mskImage.IsNull())
MessageBox(L"Mask image load failed!");
hbmMask = (HBITMAP)mskImage.Detach();
mImage.MaskBlt(dc.GetSafeHdc(), 0,0, mImage.GetWidth(), mImage.GetHeight(),0,0, hbmMask,0,0,0);
*/
//mImage.MaskBlt(dc.GetSafeHdc(), 0, 0, mImage.GetWidth(), mImage.GetHeight(), 0, 0,NULL, 0, 0);
//mImage.MaskBlt(dc.GetSafeHdc(), CRect(0, 0, mImage.GetWidth(), mImage.GetHeight()), CPoint(0, 0), NULL, CPoint(0, 0));
//mImage.MaskBlt(dc.GetSafeHdc(), 0,0, NULL);
//mImage.MaskBlt(dc.GetSafeHdc(), CPoint(0, 0), NULL);
//PlgBlt
/*
CPoint point[3];
point[0] = CPoint(0, 0);
point[1] = CPoint(mImage.GetWidth(),0);
point[2] = CPoint(0, mImage.GetHeight());
*/
//mImage.PlgBlt(dc.GetSafeHdc(), point);
//mImage.PlgBlt(dc.GetSafeHdc(), point,0,0, mImage.GetWidth(), mImage.GetHeight());
//mImage.PlgBlt(dc.GetSafeHdc(), point, CRect(0, 0, mImage.GetWidth(), mImage.GetHeight()));
//StretchBlt
//mImage.StretchBlt(dc.GetSafeHdc(), 0,0, mImage.GetWidth()*2, mImage.GetHeight()*2);
//mImage.StretchBlt(dc.GetSafeHdc(), CRect(0, 0, mImage.GetWidth() * 2, mImage.GetHeight() * 2));
//mImage.StretchBlt(dc.GetSafeHdc(), 0,0, mImage.GetWidth() * 2, mImage.GetHeight() * 2,0, 0, mImage.GetWidth(), mImage.GetHeight());
//TransparentBlt
//mImage.TransparentBlt(dc.GetSafeHdc(), 0, 0, mImage.GetWidth() * 2, mImage.GetHeight() * 2, 0x000000);//将黑色设为透明色
//mImage.TransparentBlt(dc.GetSafeHdc(), CRect(0, 0, mImage.GetWidth() * 2, mImage.GetHeight() * 2),0xFFFFFF);//将白色设为透明色
//mImage.TransparentBlt(dc.GetSafeHdc(), 0, 0, mImage.GetWidth(), mImage.GetHeight(), 0, 0, mImage.GetWidth(), mImage.GetHeight(),0x000000);//将黑色设为透明色
mImage.TransparentBlt(dc.GetSafeHdc(), CRect(0, 0, mImage.GetWidth(), mImage.GetHeight()), CRect(0, 0, mImage.GetWidth(), mImage.GetHeight()), 0x000000);//将黑色设为透明色
}
else
{
MessageBox(L"还没加载图像!");
}
}
Draw()函数实例
Draw()函数有多个重载函数,这里将其用法示例代码都写出来,然后注释掉,只演示测试试后一个重载函数用法。代码如下:
void CCImageTest1Dlg::OnBnClickedDisplayImage()
{
// TODO: 在此添加控件通知处理程序代码
Invalidate();
OnPaint();
if (!mImage.IsNull())
{
CClientDC dc(this);
//BitBlt
//mImage.BitBlt(dc.GetSafeHdc(), 20, 20, SRCCOPY);
// AlphaBlend
//mImage.AlphaBlend(dc.GetSafeHdc(), 20, 20, 0xFF);//不透明,图像最清晰
//mImage.AlphaBlend(dc.GetSafeHdc(), 20, 20, 0x80);
//mImage.AlphaBlend(dc.GetSafeHdc(), CPoint(20, 20), 0x80);
//mImage.AlphaBlend(dc.GetSafeHdc(),20,20,mImage.GetWidth()*2, mImage.GetHeight()*2,0,0, mImage.GetWidth(), mImage.GetHeight(),0x80);
//mImage.AlphaBlend(dc.GetSafeHdc(), CRect(20, 20, mImage.GetWidth() * 2, mImage.GetHeight() * 2), CRect(0, 0, mImage.GetWidth(), mImage.GetHeight()), 0x80);
//MaskBlt
/*
CImage mskImage;
HBITMAP hbmMask;
mskImage.Load(L"c.jpeg");
if (mskImage.IsNull())
MessageBox(L"Mask image load failed!");
hbmMask = (HBITMAP)mskImage.Detach();
mImage.MaskBlt(dc.GetSafeHdc(), 0,0, mImage.GetWidth(), mImage.GetHeight(),0,0, hbmMask,0,0,0);
*/
//mImage.MaskBlt(dc.GetSafeHdc(), 0, 0, mImage.GetWidth(), mImage.GetHeight(), 0, 0,NULL, 0, 0);
//mImage.MaskBlt(dc.GetSafeHdc(), CRect(0, 0, mImage.GetWidth(), mImage.GetHeight()), CPoint(0, 0), NULL, CPoint(0, 0));
//mImage.MaskBlt(dc.GetSafeHdc(), 0,0, NULL);
//mImage.MaskBlt(dc.GetSafeHdc(), CPoint(0, 0), NULL);
//PlgBlt
/*
CPoint point[3];
point[0] = CPoint(0, 0);
point[1] = CPoint(mImage.GetWidth(),0);
point[2] = CPoint(0, mImage.GetHeight());
*/
//mImage.PlgBlt(dc.GetSafeHdc(), point);
//mImage.PlgBlt(dc.GetSafeHdc(), point,0,0, mImage.GetWidth(), mImage.GetHeight());
//mImage.PlgBlt(dc.GetSafeHdc(), point, CRect(0, 0, mImage.GetWidth(), mImage.GetHeight()));
//StretchBlt
//mImage.StretchBlt(dc.GetSafeHdc(), 0,0, mImage.GetWidth()*2, mImage.GetHeight()*2);
//mImage.StretchBlt(dc.GetSafeHdc(), CRect(0, 0, mImage.GetWidth() * 2, mImage.GetHeight() * 2));
//mImage.StretchBlt(dc.GetSafeHdc(), 0,0, mImage.GetWidth() * 2, mImage.GetHeight() * 2,0, 0, mImage.GetWidth(), mImage.GetHeight());
//TransparentBlt
//mImage.TransparentBlt(dc.GetSafeHdc(), 0, 0, mImage.GetWidth() * 2, mImage.GetHeight() * 2, 0x000000);//将黑色设为透明色
//mImage.TransparentBlt(dc.GetSafeHdc(), CRect(0, 0, mImage.GetWidth() * 2, mImage.GetHeight() * 2),0xFFFFFF);//将白色设为透明色
//mImage.TransparentBlt(dc.GetSafeHdc(), 0, 0, mImage.GetWidth(), mImage.GetHeight(), 0, 0, mImage.GetWidth(), mImage.GetHeight(),0x000000);//将黑色设为透明色
//mImage.TransparentBlt(dc.GetSafeHdc(), CRect(0, 0, mImage.GetWidth(), mImage.GetHeight()), CRect(0, 0, mImage.GetWidth(), mImage.GetHeight()), 0x000000);//将黑色设为透明色
//void CCImageTest1Dlg::OnBnClickedDisplayImage()
{
// TODO: 在此添加控件通知处理程序代码
OnPaint();
if (!mImage.IsNull())
{
CClientDC dc(this);
//BitBlt
//mImage.BitBlt(dc.GetSafeHdc(), 20, 20, SRCCOPY);
// AlphaBlend
//mImage.AlphaBlend(dc.GetSafeHdc(), 20, 20, 0xFF);//不透明,图像最清晰
//mImage.AlphaBlend(dc.GetSafeHdc(), 20, 20, 0x80);
//mImage.AlphaBlend(dc.GetSafeHdc(), CPoint(20, 20), 0x80);
//mImage.AlphaBlend(dc.GetSafeHdc(),20,20,mImage.GetWidth()*2, mImage.GetHeight()*2,0,0, mImage.GetWidth(), mImage.GetHeight(),0x80);
//mImage.AlphaBlend(dc.GetSafeHdc(), CRect(20, 20, mImage.GetWidth() * 2, mImage.GetHeight() * 2), CRect(0, 0, mImage.GetWidth(), mImage.GetHeight()), 0x80);
//MaskBlt
/*
CImage mskImage;
HBITMAP hbmMask;
mskImage.Load(L"c.jpeg");
if (mskImage.IsNull())
MessageBox(L"Mask image load failed!");
hbmMask = (HBITMAP)mskImage.Detach();
mImage.MaskBlt(dc.GetSafeHdc(), 0,0, mImage.GetWidth(), mImage.GetHeight(),0,0, hbmMask,0,0,0);
*/
//mImage.MaskBlt(dc.GetSafeHdc(), 0, 0, mImage.GetWidth(), mImage.GetHeight(), 0, 0,NULL, 0, 0);
//mImage.MaskBlt(dc.GetSafeHdc(), CRect(0, 0, mImage.GetWidth(), mImage.GetHeight()), CPoint(0, 0), NULL, CPoint(0, 0));
//mImage.MaskBlt(dc.GetSafeHdc(), 0,0, NULL);
//mImage.MaskBlt(dc.GetSafeHdc(), CPoint(0, 0), NULL);
//PlgBlt
/*
CPoint point[3];
point[0] = CPoint(0, 0);
point[1] = CPoint(mImage.GetWidth(),0);
point[2] = CPoint(0, mImage.GetHeight());
*/
//mImage.PlgBlt(dc.GetSafeHdc(), point);
//mImage.PlgBlt(dc.GetSafeHdc(), point,0,0, mImage.GetWidth(), mImage.GetHeight());
//mImage.PlgBlt(dc.GetSafeHdc(), point, CRect(0, 0, mImage.GetWidth(), mImage.GetHeight()));
//StretchBlt
//mImage.StretchBlt(dc.GetSafeHdc(), 0,0, mImage.GetWidth()*2, mImage.GetHeight()*2);
//mImage.StretchBlt(dc.GetSafeHdc(), CRect(0, 0, mImage.GetWidth() * 2, mImage.GetHeight() * 2));
//mImage.StretchBlt(dc.GetSafeHdc(), 0,0, mImage.GetWidth() * 2, mImage.GetHeight() * 2,0, 0, mImage.GetWidth(), mImage.GetHeight());
//TransparentBlt
//mImage.TransparentBlt(dc.GetSafeHdc(), 0, 0, mImage.GetWidth() * 2, mImage.GetHeight() * 2, 0x000000);//将黑色设为透明色
//mImage.TransparentBlt(dc.GetSafeHdc(), CRect(0, 0, mImage.GetWidth() * 2, mImage.GetHeight() * 2),0xFFFFFF);//将白色设为透明色
//mImage.TransparentBlt(dc.GetSafeHdc(), 0, 0, mImage.GetWidth(), mImage.GetHeight(), 0, 0, mImage.GetWidth(), mImage.GetHeight(),0x000000);//将黑色设为透明色
//mImage.TransparentBlt(dc.GetSafeHdc(), CRect(0, 0, mImage.GetWidth(), mImage.GetHeight()), CRect(0, 0, mImage.GetWidth(), mImage.GetHeight()), 0x000000);//将黑色设为透明色
//Draw
//mImage.Draw(dc.GetSafeHdc(), 0, 0, mImage.GetWidth()* 2, mImage.GetHeight()*2, 0, 0, mImage.GetWidth(), mImage.GetHeight());//将图像放大两倍显示
//mImage.Draw(dc.GetSafeHdc(), CRect(0, 0, mImage.GetWidth(), mImage.GetHeight()), CRect(0, 0, mImage.GetWidth() * 2, mImage.GetHeight() * 2));//将图像缩小为原来的一半倍显示
//mImage.Draw(dc.GetSafeHdc(), 100, 100);//将100,100点作为显示图像的左上角位置
//mImage.Draw(dc.GetSafeHdc(), CPoint(100, 100));//将100,100点作为显示图像的左上角位置
//mImage.Draw(dc.GetSafeHdc(), 0, 0, mImage.GetWidth() * 2, mImage.GetHeight() * 2);//将图像放大两倍显示
mImage.Draw(dc.GetSafeHdc(), CRect(0, 0, mImage.GetWidth() * 2, mImage.GetHeight() * 2));//将图像放大两倍显示
}
else
{
MessageBox(L"还没加载图像!");
}
}
}
else
{
MessageBox(L"还没加载图像!");
}
}
试运行,加载图像:
显示图像,结果如下:
与图像数据操作相关的方法
获取图像的高度与宽度
获取图像高度与宽度分别用到GetHeight,GetWidth方法。
GetHeight 检索图像的高度(以像素为单位)。其原型如下:
int GetHeight() const throw();
返回值:图像的高度(以像素为单位)。
GetWidth 检索图像的宽度(以像素为单位)。其原型如下:
int GetWidth() const throw();
返回值:位图的宽度(以像素为单位)。
GetBits 检索指向位图中给定像素的实际位值的指针。其原型如下:
void* GetBits() throw();
返回值:指向位图缓冲区的指针。 如果位图是自下而上的 DIB,则指针指向缓冲区末端附近。 如果位图是自上而下的 DIB,则指针指向缓冲区的第一个字节。用此指针以及 GetPitch 返回的值,可以在图像中查找和更改各个像素。
GetBPP 检索每像素位数的值。其原型如下:
int GetBPP() const throw();
返回值:每像素位数。此值确定定义每个像素的位数以及位图中颜色的最大数量。每像素位数通常为 1、4、8、16、24 或 32。
GetColorTable 从 DIB 节调色板的条目范围检索红、绿、蓝 (RGB) 颜色值。其原型如下:
void GetColorTable(
UINT iFirstColor,
UINT nColors,
RGBQUAD* prgbColors) const throw();
参数:
iFirstColor 要检索的第一个条目的颜色表索引。
nColors 要检索的颜色表条目数。
prgbColors 指向 RGBQUAD 结构数组的指针,用于检索颜色表条目。
GetDC 检索当前已选择图像的设备上下文。其原型如下:
HDC GetDC() const throw();
返回值:设备上下文的句柄。
GetMaxColorTableEntries 检索颜色表中的最大条目数。其原型如下:
int GetMaxColorTableEntries() const throw();
返回值:颜色表中的条目数。此方法仅支持 DIB 节位图。
GetPitch 检索图像的间距。其原型如下:
int GetPitch() const throw();
返回值:图像的间距。 如果返回值为负数,则位图为自下而上的 DIB,其原点为左下角。 如果返回值为正数,则位图为自上而下的 DIB,其原点为左上角。间距是两个内存地址之间的距离(以字节为单位),这两个地址分别表示一个位图行开头和下一个位图行开头。 由于间距度量以字节为单位,因此图像的间距有助于确定像素格式。 间距还可以包含为位图保留的额外内存。将GetPitch 与 GetBits 结合使用查找图像的各个像素。
GetPixel 检索x 和y指定的位置的像素颜色。其原型如下:
COLORREF GetPixel(int x, int y) const throw();
参数:
X 像素的 x 坐标。
Y 像素的 y 坐标。
返回值:像素的红、绿、蓝 (RGB) 值。 如果像素位于当前剪切区域之外,则返回值为
CLR_INVALID 。
GetPixelAddress 检索像素的确切地址。其原型如下:
void* GetPixelAddress(int x, int y) throw();
参数:
X 像素的 x 坐标。
Y 像素的 y 坐标。
该地址根据像素的坐标、位图的间距以及每像素位数确定。对于每像素少于 8 位的格式,此方法返回包含像素的字节的地址。 例如,如果图像格式每像素有 4 位,则 GetPixelAddress 返回字节中第一个像素的地址,并且必须计算每字节2 像素。此方法仅支持 DIB 节位图。
GetTransparentColor 检索调色板中透明颜色的索引位置。其原型如下:
LONG GetTransparentColor() const throw();
返回值:透明颜色的索引。
SetPixel 设置位图中给定位置像素的颜色。其原型如下:
void SetPixel(int x, int y, COLORREF color) throw();
参数:
X 要设置的像素的水平位置。
Y 要设置的像素的垂直位置。
Color 设置像素的颜色。
注意:如果像素坐标位于所选剪切区域之外,此方法将失败。
SetPixelIndexed 将像素颜色设置为位于调色板中iIndex的颜色。其原型如下:
void SetPixelIndexed(int x, int y, int iIndex) throw();
参数:
X 要设置的像素的水平位置。
Y 要设置的像素的垂直位置。
iIndex 调色板中颜色的索引。
SetPixelRGB 将x和y指定位置的像素设置为r 、g 和b所表示的颜色,采用红、绿、蓝 (RGB) 图像。其原型如下:
void SetPixelRGB(
int x,
int y,
BYTE r,
BYTE g,
BYTE b) throw();
参数:
x 要设置的像素的水平位置。
y 要设置的像素的垂直位置。
r 红色的强度。
g 绿色的强度。
b 蓝色的强度。
SetTransparentColor 将给定索引位置的颜色设置为透明。其原型如下:
LONG SetTransparentColor(LONG iTransparentColor) throw();
参数:
iTransparentColor 在调色板中,要设置为透明的颜色的索引。 如果为 -1,则不会将颜色设置为透明。
返回值: 先前设置为透明的颜色的索引。
IsDIBSection 确定附加位图是否为DIB节。其原型如下:
bool IsDIBSection() const throw();
返回值:如果附加位图是DIB节,则返回TRUE 。 否则为FALSE 。
如果位图不是 DIB 节,则不能使用以下 CImage 方法,该方法仅支持 DIB 节位图:GetBits、GetColorTable、GetMaxColorTableEntries、GetPitch、GetPiexlAddress、IsIndexed、SetColorTable。
IsIndexed 确定位图的像素是否映射到调色板。其原型如下:
bool IsIndexed() const throw();
返回值:如已索引,则返回TRUE ;否则返回FALSE。仅当位图是 8 位(256 种颜色)或更少时,此方法才会返回TRUE 。
与图像像素操作相关的常用函数已在前面的示例中用过,未用到的都是不常用的函数,这里就不再用实例演示了。
图像存储
使用CImage类可以轻松实现图像存储,且可存储为CImage类所支持的其他格式。图像存储的函数为Save。其原型如下:
HRESULT Save(
IStream* pStream,
REFGUID guidFileType) const throw();
HRESULT Save(
LPCTSTR pszFileName,
REFGUID guidFileType = GUID_NULL) const throw();
参数:
pStream 指向包含文件图像数据的 COM IStream 对象的指针。
pszFileName 指向图像文件名的指针。
guidFileType 保存图像的文件类型。可以是以下值之一:
ImageFormatBMP 未压缩的位图图像。
ImageFormatPNG 可移植网络图形格式 (PNG) 压缩图像。
ImageFormatJPEG JPEG 压缩图像。
ImageFormatGIF GIF 压缩图像。
返回值:一个标准 HRESULT 。调用此函数以使用指定的名称和类型保存图像。 如果未包含 guidFileType 参数,则文件名的文件扩展名将用于确定图像格式。 如果未提供扩展名,则图像将以 BMP 格式保存
图像存储示例
为对话框的保存图像按钮添加事件响应函数,代码如下:
void CCImageTest1Dlg::OnBnClickedSave()
{
// TODO: 在此添加控件通知处理程序代码
if (mImage.IsNull())
{
MessageBox(L"图像对象为空,没有图像可存储");
}
else
{
CString m_Path, m_strEx, m_strName;
CFileDialog fdlg(FALSE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("All files(*.*)|*.*||"));
if (fdlg.DoModal() == IDOK)
{
m_Path = fdlg.GetPathName();
m_strEx = fdlg.GetFileExt();
m_strName = fdlg.GetFileName();
m_Path.ReleaseBuffer();
m_strEx.ReleaseBuffer();
m_strName.ReleaseBuffer();
}
if (m_strEx == "BMP" || m_strEx == "bmp" || m_strEx == "TIFF" || m_strEx == "tiff" || m_strEx == "PNG" || m_strEx == "png" || m_strEx == "jpeg" || m_strEx == "JPEG")
{
mImage.Save(m_Path);
}
else if (m_strEx == "")
{
m_Path += ".bmp";
mImage.Save(m_Path);
}
}
}
试运行,加载图像:
显示图像:
保存图像,输入文件名a1
然后点击保存。
再点击加载图像,可看到在上次加载图像的文件夹中多了一个a1.bmp文件,说明图像保存成功。
分离附加在CImage对象上的位图
实现分离附加在CImage对象上的方法有Destroy与Detach。
Destroy 从CImage 对象中分离位图并销毁位图。其原型如下:
void Destroy() throw();
Detach 从CImage 对象中分离位图。其原型如下:
HBITMAP Detach() throw();
返回值:分离位图的句柄,如果无附加位图,则为NULL 。
获取当前已选择图像的DC(设备上下文)及释放DC及资源
GetDC 检索当前已选择图像的设备上下文。其原型如下:
HDC GetDC() const throw();
返回值:设备上下文的句柄。对于GetDC的每次调用,必须后续调用ReleaseDC。
ReleaseDC 释放设备上下文。其原型如下:
void ReleaseDC() const throw();
因为一次只能在设备上下文中选择一个位图,所以每次调用 GetDC 时都必须调用
ReleaseDC 。
ReleaseGDIPlus 释放由GDI+占用的资源。其原型如下:
void ReleaseGDIPlus() throw();
如果GDI+有用到Cimage对象位图资源,必须调用此方法以释放由全局CImage对象分配的资源。
CImage类及成员函数用法详解就介绍到这里。实例源码(基于VS2022),已上传到CSDN,链接为:https://download.csdn.net/download/billliu66/89165102
文章评论