/******************************************** ****************************** *函数名: * FadeIn(CDC *pDC) * *函数参数: * CDC *pDC-指向设备环境的指针,用于显示位图数据 * *返回值: * 无 * *说明:该函数实现了图像的渐进显示的效果 ********************************************** ****************************/ void SpecialEffectShow::FadeIn(CDC *pDC) { int bitmapWidth=GetDimensions().cx;//获得源图像 的宽度,以像素为单位 int bitmapHeight=GetDimensions().cy;//获得源图像 的高度,以像素为单位 CRect rect(0,0,bitmapWidth,bitmapHeight);//以源 图像的尺寸创建一个矩形 CBrush brush(RGB(0,0,0)); //设置画刷为黑色 pDC->FillRect(&rect,&brush);//将已经显示出来的原 图像重新设置成黑色,达到刷新屏幕的效果 LPBITMAPINFO pBitmapInfo=(BITMAPINFO*)m_lpBmpInfoHead; //为适应StretchDIBits函数的需要,将图像信息头指针 强制转换为LPBITMAPINFO类型 int lineByte=(m_imgWidth*m_nBitCount/8+3)/4*4;// 每行像素所占字节数,必须为4的倍数 LPBYTE temp =new BYTE[bitmapHeight*lineByte];// 在堆上分配内存存储临时图像数据 memset (temp,0,bitmapHeight*lineByte);//初始置零 for(int m=0;m<256;m++) { for(int j = 0; j < bitmapHeight; j++) { for(int i = 0; i < lineByte; i ++) temp[j*lineByte+i]=m_pImgData[j*lineByte+i] *m/256;//将每像素灰度值设置为原始值的m/256倍大小 } ::StretchDIBits(pDC->GetSafeHdc(), 0, 0, bitmapWidth, bitmapHeight, 0, 0, bitmapWidth, bitmapHeight, temp, pBitmapInfo,DIB_RGB_COLORS, SRCCOPY); Sleep(3);//设置延时时间 } delete [] temp;//释放堆上分配的内存 } |