8-图像放大

其实,就是开辟一个zoomwidth,zoomheight的内存,再分别赋值即可。

void CDib::Maginify(float xZoom, float yZoom)

{

//指向原图像指针

LPBYTE p_data = GetData();

//指向原像素的指针

LPBYTE lpSrc;

//指向缩放图像对应像素的指针

LPBYTE lpDst ;

//像素在原DIB的坐标

LONG i;

LONG j;

//循环变量(像素在新图中的坐标)

LONG i0;

LONG j0;

//图像的宽和高

LONG width = GetWidth();

LONG height = GetHeight();

//计算放缩后的图像宽度和高度

LONG newWidth = (LONG)(width * xZoom + 0.5);

LONG newHeight = (LONG)(height * yZoom + 0.5);

LONG newLineBytes = (newWidth * 8 + 31) / 32 * 4;

//暂时分配内存,以保存新图像

LPBYTE temp1 = new BYTE[newWidth * newHeight];

memset(temp1, (BYTE)255, newWidth * newHeight);

int r, g, b;

for (int i = 0; i < newWidth; i++)

{

for (int j = 0; j < newHeight; j++)

{

lpDst = (LPBYTE)temp1 + newWidth * j + i;

int i0 = (i / xZoom + 0.5);

int j0 = (j / yZoom + 0.5);

if ((i0 >=0 ) && ( i0 < width) && (j0 >= 0) && (j0 < height))

{

lpSrc = (LPBYTE)p_data + width * j0 + i0;

*lpDst = *lpSrc;

}

}

}

m_pData = temp1;

m_pBitmapInfoHeader->biWidth = newWidth;

m_pBitmapInfoHeader->biHeight = newHeight;

}

构造函数调用

CMy1_showbitmapView::CMy1_showbitmapView()

{

_cdib.LoadFile ("D:/Test/DataProcess/result.bmp");

_cdib.Maginify(2.0, 2.0);

}

相关推荐
大游小游之老游1 天前
漫谈《数字图像处理》之边缘检测与边界预处理的辨析
图像分割·数字图像处理·边缘检测·特征提取
大游小游之老游7 天前
实践《数字图像处理》之Canny边缘检测、霍夫变换与主动二值化处理在短线段清除应用中的实践
图像分割·数字图像处理·边缘检测
大游小游之老游12 天前
漫谈《数字图像处理》之实时美颜技术
数字图像处理·美颜
大游小游之老游17 天前
漫谈《数字图像处理》之区域生长和区域分离聚合
图像分割·数字图像处理
Aiah.21 天前
数字图像处理(一)
开发语言·计算机视觉·matlab·数字图像处理
Fuliy961 个月前
【数字图像处理系列笔记】Ch04:灰度变换与空间域图像增强(2)
图像处理·人工智能·笔记·计算机视觉·数字图像处理
Fuliy961 个月前
【数字图像处理系列笔记】Ch03:图像的变换
图像处理·人工智能·笔记·学习·计算机视觉·数字图像处理
程序员Linc6 个月前
了解图像质量评价指标PSNR
数字图像处理·psnr·图像质量评价
程序员Linc6 个月前
《数字图像处理》第三章 3.7 混合空间增强法笔记:原理、实现与Python实战
开发语言·笔记·python·数字图像处理·混合空间增强
程序员Linc6 个月前
《数字图像处理》第四章 频率域滤波简要学习笔记以及频率域滤波与空间域滤波的区别
笔记·学习·数字图像处理·频率域滤波