大家好,欢迎来到IT知识分享网。
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/
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/123279.html