你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 图形图象处理与游戏编程
利用GDI函数减轻图像缩放失真(四)
 

//用于控制缩放显示的变量

    BYTE *DisplayData; //用来缩放显示的内存显示单元

    long DisplayWidth,DisplayHeight; //图像显示的宽度和高度

    LPBITMAPINFO lpbmi;

};

上述声明中的Zoom(double scale)函数为图像平滑缩放函数scale为伸缩比例执行成功返回true失败返回false具体定义如下

bool CMyBitmap::Zoom(double scale) //scale 为缩放比例

{

   if (scale<=0) {return false;} //scale必须大于0

   if ((scale * m_Width) <=10||(scale * m_Height) <=10) {return false; } //显示图像的宽度或高度必须大于10   

  DisplayWidth= long (scale * m_Width); //计算缩放后的图像宽度

   DisplayHeight=long (scale * m_Height); //计算缩放后的图像高度

  if (DisplayData!=NULL) delete DisplayData;

  long RowsWidth=WIDTHBYTES(DisplayWidth * m_wBitCount); //每行像素的字节数

  DisplayData=new BYTE[RowsWidth * DisplayHeight]; //分配用来缩放显示的数据区

  if (DisplayData==NULL)  return false; //分配空间失败

  if (lpbmi!=NULL) delete lpbmi; //释放原来分配的空间

  LPBYTE lpSourceBits,lpTargetBits;

  HDC hDC=NULL,hSourceDC,hTargetDC;

  HBITMAP hSourceBitmap,hTargetBitmap,hOldSourceBitmap,hOldTargetBitmap;

  DWORD dwTargetBitsSize,dwTargetHeaderSize;

  LPBITMAPINFO lpSrcDIB=bInfo;   //像素数据区

  dwTargetHeaderSize=sizeof(BITMAPINFOHEADER) + PaletteSize((LPSTR)lpSrcDIB); //计算目标头信息的大小

  lpbmi=(LPBITMAPINFO)malloc(dwTargetHeaderSize);  //分配空间

  memcpy(lpbmi,lpSrcDIB,dwTargetHeaderSize); //拷贝位文件头信息

  lpbmi->bmiHeader.biWidth=DisplayWidth;   //修改图像显示宽度

  lpbmi->bmiHeader.biHeight=DisplayHeight; //修改图像显示高度

  hDC=GetDC(NULL); //获取当前显示上下文设备句柄

  hTargetBitmap=CreateDIBSection(hDC,lpbmi,DIB_RGB_COLORS,(void **)&lpTargetBits,NULL,0);

  hSourceBitmap=CreateDIBSection(hDC,lpSrcDIB,DIB_RGB_COLORS,(void **)&lpSourceBits,NULL,0);

  hSourceDC=CreateCompatibleDC(hDC);  //创建与当前上下文设备兼容的句柄

  hTargetDC=CreateCompatibleDC(hDC); 

  dwTargetBitsSize= DisplayHeight * RowsWidth ; //显示数据区的大小

  memcpy(lpSourceBits,m_PixelBuffer,m_datasize); //拷贝数据

  lpbmi->bmiHeader.biSizeImage = dwTargetBitsSize; //目标像素区的大小

  hOldSourceBitmap=(HBITMAP)SelectObject(hSourceDC,hSourceBitmap);//将源位图资源数据选入上下文设备hSourceDC

  推荐精品文章

·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089