欢迎使用优快云-markdown编辑器

  为了能够自己实现一些图像处理的算法,所以需要得到图像的数据并能够显示。
  图片要使用bmp位图,结构简单而且windows支持很多操作。为了方便所以先使用24位真彩色位图,这种位图没有调色板。
  一般画图是在视类的OnDraw中画图,使用StretchDIBits将图像数据直接贴到窗口上。StretchDIBits的第一个参数是HDC的对象。可以直接使用OnDraw的pDC参数中的m_hdc成员。为了更好的显示效果,用CMemDC类来画图,这个类可以实现一个双缓存机制。

CMemDC memDC(*pDC, this);
CDC &dc = memDC.GetDC();

首先打开位图

CFile file;                             
file.Open(_T("1.bmp"), CFile::modeRead)

读取位图文信和位图信息头

BITMAPFILEHEADER bitFileHead;
file.Read(&bitFileHead, sizeof(BITMAPFILEHEADER));
BITMAPINFOHEADER bitInfoHead;
file.Read(&bitInfoHead, sizeof(BITMAPINFOHEADER));

按理说BITMAPINFOHEADER 中的biSizeImage应该保存了位图大小的,但实际上数值为0,很奇怪。所以接下来读取位图数据就使用bitWidth和bitHeight两个参数,由于是24位真彩色,所以要乘以3。

BYTE *data;
data = new BYTE[bitInfoHead.biWidth*bitInfoHead.biHeight*3];    
file.Read(data, bitInfoHead.biWidth*bitInHeight*3);

接下来画图:

if (data != NULL)
{
    BYTE *pHeader = data;           
    int nWidth = bitInfoHead.biWidth;               
    int nHeight = bitInfoHead.biHeight; 
    StretchDIBits(dc.m_hDC, 0, 0, nWidth, nHeight, 0, 0,nWidth,nHeight,
pHeader, (LPBITMAPINFO)&bitInfoHead, DIB_RGB_COLORS, SRCCOPY);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值