vc中显示bmp常用的几个函数介绍

2016-02-19 21:06 15 1 收藏

下面图老师小编要向大家介绍下vc中显示bmp常用的几个函数介绍,看起来复杂实则是简单的,掌握好技巧就OK,喜欢就赶紧收藏起来吧!

【 tulaoshi.com - 编程语言 】

vc 中动态显示bmp 的方法大致是三种:(我以320×240×1的255色灰度图举例)

1:将bmp导入资源中,这是最方便的,但同时也是最不灵活的,而且也费资源。

使用CBitmap 的LoadBmp(..)

2:可以通过

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

hBitmap=(HBITMAP) ::LoadImage(NULL,picname,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
具体使用可以参考msdn,我一开始接触时 就是用的这个函数。

之后(CDC *pDc =GetDC();)

HBITMAP OldBitmap;
 
    CDC MemDC;
    CRect rect;
    MemDC.CreateCompatibleDC(pDc);
   
    GetClientRect(rect);
    OldBitmap=(HBITMAP)MemDC.SelectObject(hBitmap);
    pDc-BitBlt(4,4,(rect.Width())-3,(rect.Height())-3,&MemDC,0,0,SRCCOPY);
    MemDC.SelectObject(OldBitmap);
    MemDC.DeleteDC();
    DeleteObject((HGDIOBJ)hBitmap);

就可以在自己喜欢的地方显示bmp图了。如果显示的是灰度图,这样可以不考虑彩色表,本身是什么图(灰度的,彩色的,单色的)它就显示什么图。

3:通过数据数组:从采集卡上采集的都是固定格式的数据。所以没有必要将数据做成bmp图,在通过(2)的方法显示出来---我最初就是用这种方法,很笨的哦。

通过函数:StretchDIBits(*pDc,10,10,640,480,0,0,320,240,tmp_buf,bmpInfoHdr,BI_RGB,SRCCOPY);-(640,480,是将原图扩大到这个象素)。其中tmp_buf 为数据数组的地址,bmpInfoHdr为位图信息。

LPBITMAPINFO  bmpInfoHdr= (LPBITMAPINFO)new BYTE[1064];


fread(&bmpFileHdr,sizeof(BITMAPFILEHEADER),1, fp);

fread(&bmpInfoHdr-bmiHeader,40,1, fp);
for(int i=0;i256;i++)
{
    bmpInfoHdr-bmiColors[i].rgbBlue=(BYTE)i;
    bmpInfoHdr-bmiColors[i].rgbGreen=(BYTE)i;
    bmpInfoHdr-bmiColors[i].rgbRed=(BYTE)i;
    bmpInfoHdr-bmiColors[i].rgbReserved=(BYTE)0;
}
由于是灰度图,所以需要自定义彩色表。

*CBitmap 中的 m_bmp.CreateBitmap(320,240,1,255,(BYTE*)tmp_buf);或CreateBitmap(320,240,1,255,(BYTE*)tmp_buf);
都不好用, 原因是 msdn中说的,第三个参数和第四个参数都应为1,才能输出图,并且只能是单色图,还有 m_bmp.CreateBitmapIndirect(&bitmap)。。。CreateCompatibleBitmap等等,这么麻烦,还不一定好用,我还不如不用这个方法了。

最后别忘了要删除bmp图占的空间。如

MemDC.DeleteDC();   DeleteObject((HGDIOBJ)hBitmap); 小程序可能看不来,但是如果是采集卡上输出的数据,不用几十秒,你的内存就让它给吃完了。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

来源:https://www.tulaoshi.com/n/20160219/1625275.html

延伸阅读
标签: 电脑入门
在使用excel时,我们常常会使用一些函数,本文中为大家介绍CONCATENATE函数的使用方法。 语法 CONCATENATE (text1,text2,...) Text1, text2, ... 为 1 到 30 个将要合并成单个文本项的文本项。这些文本项可以为文本字符串、数字或对单个单元格的引用。 说明 也可以用 &(和号)运算符代替函数 CONCATENATE 实现文本项的合并。 ...
解决思路 我们可以用链接的方式导入图片文件,比如001.bmp,然后将指定文件夹中的文件依次更名为001.bmp,显示之后再将其改回原来的名字。 在实现之前,您得先将要显示的图片放在指定的文件夹内,比如本例中的C:WINDOWSDesktopimages。要说明的是本例中只能显示BMP格式,所以要先将图片的格式统一为BMP格式。 提取目录 在流程线上放...
标签: PHP
  把GB码转换到UTF8,php中TTF支持UTF8编码的非ASCII字符输出.在分析这段代码之后,发现可以实现中文与ASCII混合输出图象,这样在我们操作图象函数时可以更方便. 代码如下: <? function gb2utf8($gb) { if(!trim($gb)) return $gb; $filename="gb2312.txt"; $tmp=file($filename); $codetable=array(); while(list($...
标签: Web开发
如何在PHP图形函数中显示汉字,大家已经问了很久了,但一直没有结果。终于在参考另一篇文章后,我试验出来了! 方法: 首先,决定要显示哪些汉字,如“计数器”这三个字。 到Word2000(97不知可不可以)中去,输入这三个字,另存为,选择编码格式,然后再在右边的编码类型里选择unicode utf-8,记住不要选错了。存成一个编码格式的文本文...
标签: Web开发
创建XMLHTTP对象,区别IE,Mozilla浏览器     代码如下:  function getRequest() {           http_request = false;           if (window.XMLHttpRequest) {  &...

经验教程

393

收藏

38
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部