www.pudn.com > ImageProcessing.rar.rar > Zoom.cpp
#include "stdafx.h" #include "Zoom.h" #include "cdib.h" #include#include LPBYTE WINAPI Zoom(CDib* pDibBase , LONG Begin, LONG End) { // 基准图象的宽度和高度 LONG lWidth, lHeight; lWidth = pDibBase->m_lpBMIH->biWidth; lHeight= pDibBase->m_lpBMIH->biHeight; // 计算结果图象的存储大小尺寸 CSize sizeBase; sizeBase = pDibBase->GetDibSaveDim(); // 截图后图像的宽度和高度 LONG lNewWidth; LONG lNewHeight; // 截图后的图象 CDib* m_pDibResult; //如果输入的Begin 小于0 则 if(Begin<0) Begin=0; //如果输入的End 大于lWidth 则 if(End>lWidth) End=lWidth; // 计算截图后的图像实际宽度 // 此处直接加0.5是由于强制类型转换时不四舍五入,而是直接截去小数部分 lNewWidth = (LONG) (End-Begin); // 计算图像高度 lNewHeight = lHeight; // 将此图象用CDib类封装 m_pDibResult = new CDib(CSize(lNewWidth,lNewHeight), 8); // 计算结果图象的存储大小尺寸 CSize sizeSaveResult; sizeSaveResult = m_pDibResult->GetDibSaveDim(); // 拷贝调色板 memcpy(m_pDibResult->m_lpvColorTable, pDibBase->m_lpvColorTable, m_pDibResult->m_nColorTableEntries*sizeof(RGBQUAD)); // 应用调色板 m_pDibResult->MakePalette(); // 指向BITMAPINFO结构的指针(Win3.0) LPBITMAPINFOHEADER lpbmi; // 指向BITMAPCOREINFO结构的指针 LPBITMAPCOREHEADER lpbmc; // 循环变量(象素在新DIB中的坐标) LONG i; LONG j; // 象素在源DIB中的坐标 LONG i0; LONG j0; // 获取指针 lpbmi = (LPBITMAPINFOHEADER)m_pDibResult->m_lpImage; lpbmc = (LPBITMAPCOREHEADER)m_pDibResult->m_lpImage; // 对于其它格式的DIB lpbmc->bcWidth = (unsigned short) lNewWidth; lpbmc->bcHeight = (unsigned short) lNewHeight; // 分配内存给合并后的图象 LPBYTE lpImgResult; lpImgResult = (LPBYTE)new unsigned char[sizeSaveResult.cx * sizeSaveResult.cy]; // 分配内存给合并后的图象 LPBYTE lpBase; lpBase = (LPBYTE)new unsigned char[sizeBase.cx * sizeBase.cy]; //指向源图象的指针 LPBYTE lpImage ; lpImage = pDibBase->m_lpImage; // 针对图像每行进行操作 for(i = 0; i < lNewHeight; i++) { // 针对图像每列进行操作 for(j = 0; j < lNewWidth; j++) { // 指向新DIB第i行,第j个象素的指针 // 注意此处宽度和高度是新DIB的宽度和高度 lpImgResult[i*sizeSaveResult.cx + j] = m_pDibResult->m_lpImage[i*sizeSaveResult.cx + j]; // 计算该象素在源DIB中的坐标 i0 = (LONG) i; j0 = (LONG) j+Begin; // 判断是否在源图范围内 // 指向源DIB第i0行,第j0个象素的指针 lpBase[i0*sizeBase.cx+j0]=pDibBase->m_lpImage[i0*sizeBase.cx+j0]; // 复制象素 lpImgResult=lpBase; } } // 返回 return m_pDibResult->m_lpImage ; }