双缓冲绘图步骤:
1、加载图像
代码中是用的HBITMAP方式,就是下面这段。(还可以是GDI+等等)
HBITMAP hBitmap= (HBITMAP)LoadImage(NULL,BmpName,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE) // ???
m_bitmap.Detach()// ???
m_bitmap.Attach(hBitmap) // ???
2、创建内存绘图DC
CDC dcImage
BOOL flag=dcImage.CreateCompatibleDC(pDC) 其中的dcImage就是内存DC。
3、将图像一次绘制在内存DC上。
dcImage.SelectObject(m_bitmap)
2、将内存DC的图像按尺寸绘制在窗口中。
pDC->BitBlt(0,0,bitmap.bmWidth,bitmap.bmHeight,&dcImage,0,0,SRCCOPY)
建议你网上搜搜双缓冲绘图的实现。
3.16 icePub_imgToSingleBmpl 函数原型:
int WINAPI icePub_imgToSingleBmp(char *strImgFilename,char *strBmpFilename,int thresholdValue)
输入:strImgFilename 待处理图像文件名
strBmpFilename bmp图像名
thresholdValue 256级灰度值的阈值(函数会先将图像转换成灰度再根据thresholdValue做黑白2值化)
输出:
l VC连接Lib方式声明
__declspec(dllexport)
int WINAPI icePub_imgToSingleBmp(char *strImgFilename,char *strBmpFilename,int thresholdValue)
l 动态调用例程
VC sample代码:
typedef int (WINAPI ICEPUB_IMGTOSINGLEBMP)(char *strImgFilename,char *strBmpFilename,int thresholdValue)
ICEPUB_IMGTOSINGLEBMP *icePub_imgToSingleBmp = 0
HINSTANCE hDLLDrv = LoadLibrary("icePubDll.dll")
if(hDLLDrv)
{
icePub_imgToSingleBmp=(ICEPUB_IMGTOSINGLEBMP *)GetProcAddress(hDLLDrv,"icePub_imgToSingleBmp")
}
if(icePub_imgToSingleBmp)
{
icePub_imgToSingleBmp("my24.bmp","single1.bmp",150)
icePub_imgToSingleBmp("my.jpg","single2.bmp",150)
icePub_imgToSingleBmp("my.png","single3.bmp",150)
}
if(hDLLDrv)
FreeLibrary(hDLLDrv)
http://dl.icese.net/dev.php?f=icePubDll.rar 下载
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)