现在的位置: 首页 > 综合 > 正文

图像输出

2013年10月06日 ⁄ 综合 ⁄ 共 2117字 ⁄ 字号 评论关闭

图像输出
利用CDC类的位图图函数输出位图到设备上下文
 BOOL BitBlt(int x,int y,int width,int height,CDC *pSrcDC,int xSrc,int ySrc,DWORD dwRop)
   x,y表示目标区域左上角坐标
   widthheigth 表示位图分大小
    pSrcDC 表示源设备上下文指针
    xSrc,ySrc表示源设备上下文起点坐标,函数从该起点复制位图到目标设备
    dwRop 表示光栅操作代码

BOOL StretchBlt(int x,int y,int width,int height,CDC *pSrcDC,int xSrc.int ySrc,int Srcwidth,int Srcheight,DWORD dwRop)
   nSrcwidth nsrcheight表示赋值的位图高度

在OnPaint()函数中
 else
 {
 CDC *pDC=GetDC();
 CDC memDC;//定义一个设备上下文
 memDC.CreateCompatibleDC(pDC);  //创建兼容的设备上下文
 CBitmap bmp;
 bmp.LoadBitmap(IDB_BITMAP1); //载入位图
 memDC.SelectObject(&bmp);
 pDC->BitBlt(30,20,230,240,&memDC,1,1,SRCCOPY);  //绘制位图
 CRect rc(30,20,260,260);
 CBrush brush(RGB(0,0,0));
 pDC->FrameRect(rc,&brush);//绘制矩形边框
 rc.OffsetRect(240,0);//移动边框
 BITMAP bitinfo;
 bmp.GetBitmap(&bitinfo);  //获取位图信息
 int x=bitinfo.bmWidth;
 int y=bitinfo.bmHeight;
 pDC->StretchBlt(rc.left,rc.top,rc.Width(),rc.Heigh(),&memDC,0,0,x,y,SRCCOPY);
 pDC->FrameRect(rc,&brush);
        brush.DeleteObject();
 bmp.DeleteObject();
 memDC.DeleteDC();
 CDialog::OnPaint();
}

2:显示磁盘中的位图文件LoadImage()
HANDLE LoadImage(HINSTANCE hinst,LPCTSTR lpszName,UINT utype,int cxDesired,int cyDesired,UINT fuLoad)
   hinst包含图像的实例句柄
   lpszname 图像的资源名称,如果从磁盘加载,则是图像的名称,包含全部路径
   utype表示加载类型,IMAGE_BITMAP表示加载位图,IMAGE_CURSOR表示加载鼠标,
             IMAGE_ICON表示加载同图标
cxdesired  cyDesired表示图标或鼠标 的宽高,是位图时都是0
fuLoad表示加载类型LR_LOADTROMFILE表示从磁盘加载位图
返回值是加载的图像资源的句柄,为了根据资源句柄将位图输出到窗口,需要将位图对象CBitmap关联到位图句柄上,调用Attach()方法
bmp.Attach(m_hBmp)
在OnPaint()函数中

  if(m_hbitmap)
  {
  CDC *pdc=GetDC();
  CBitmap bmp;
  bmp.Attach(m_hbitmap);//将位图句柄关联到位图对象
  CDC memDC;
  memDC.CreateCompatibleDC(pdc);
  memDC.SelectObject(&bmp);
  BITMAP bitinfo;
  bmp.GetBitmap(&bitinfo);
  int x=bitinfo.bmWidth;
  int y=bitinfo.bmHeight;
  pdc->BitBlt(10,50,x,y,&memDC,0,0,SRCCOPY);
  bmp.DeleteObject();
  memDC.DeleteDC();
在处理按钮时
void CLoadBmpDlg::OnButton1()
{
 CFileDialog fl(TRUE,"bmp","",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"位图文件|*.bmp||");
 if(fl.DoModal()==IDOK)
 {
  CString file=fl.GetPathName();//获取文文件名
   m_edit.SetWindowText(file);
  if(m_hbitmap!=NULL)
  {
           DeleteObject(m_hbitmap);
     m_hbitmap=NULL;
  }
  m_hbitmap=(HBITMAP)LoadImage(NULL,file,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
  OnPaint();
 }
}
 

抱歉!评论已关闭.