MFC基于单文档的程序读取一幅bmp图片并显示,有一些代码看不懂,求高手指教

MFC基于单文档的程序读取一幅bmp图片并显示,有一些代码看不懂,求高手指教,第1张

这是双缓冲绘图。

双缓冲绘图步骤:

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_imgToSingleBmp

l 函数原型:

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 下载


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7876824.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存