首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

帮小弟我一个画图的简单的有关问题,今天结帖!(小弟我是新手)

2012-01-11 
帮我一个画图的简单的问题,今天结帖!!!!!!!!!!!!!!!!!!!!(我是新手)要实现的效果:就是把内存区的位图数据

帮我一个画图的简单的问题,今天结帖!!!!!!!!!!!!!!!!!!!!(我是新手)
要实现的效果: 
就是把内存区的位图数据转化为位图,然后把他画出来,我是这么做的:

C/C++ code
//(1)初始化,我只列出部分关键的代码哦 unsigned char  rgb_buf[100*40*3] ; //这个内存区呢,里面有很多位图r,g,b值,格式是bgrbgrbgrbgr.... CDC * cur_dc ;  CDC * mem_dc ;  CBitmap * mem_bmp ;  cur_dc = GetDC() ; //获得显示设备信息 if(mem_dc != NULL) delete mem_dc ;  mem_dc = new CDC ; if(mem_bmp != NULL) delete mem_bmp ;  mem_bmp = new CBitmap ; mem_dc- >CreateCompatibleDC(cur_dc) ; mem_bmp- >CreateCompatibleBitmap(cur_dc, 100, 40) ; mem_dc- >SelectObject(mem_bmp) ;  //(2)我要做的呢,就是读出rgb_buf的数据,把他显示到屏幕上,刚好是100*40的大小,我是这么做的 for(i = 0 ; i  < 40; i++) { for(j = 0 ; j  < 100 ; j++) { mem_dc- >SetPixel(j, i, RGB(rgb_buf[k],rgb_buf[k+1],rgb_buf[k+2])) ;  k += 3 ;  } }  //以像素为 Xidth * Height大小的区域替换完毕 cur_dc- >BitBlt(0,0, img_width, img_height, mem_dc,  0,0, SRCCOPY) ;   


可是,第2步的循环太浪费时间了,尤其是那个SetPixel
刚我也问了,我想,怎么能快速的把他画出来

请不要告诉我怎么去实现他,请根据我第一步,来把第2步重新写出来,也没几行代码吧


今天结帖

[解决办法]
把rgb_buf里面的数据 按BITMAP的格式存放
然后memcpy到mem_bmp
不知道可行不

我是新手 没做过这些
随便说的
[解决办法]
你这直接画的,没转化成位图,先转化成位图的话绘图部分简单些
CDC memDc;
Y(memDc.CreateCompatibleDC(pDC);
HBITMAP hOldBitmap = (HBITMAP)::SelectObject(memDc.GetSafeHdc(), m_hBitmap);
pDC->BitBlt(0, 0, Width, Height, &memDc, 0, 0, SRCCOPY);
::SelectObject(memDc.GetSafeHdc(), hOldBitmap);
memDc.DeleteDC() ;
[解决办法]
你用的是什么啊,vc 6?
我这里2003 和 2005都可以的,就是CBitmap的成员函数
[解决办法]
CBitmap::SetBitmapBits(),
[解决办法]
SetDIBits

注意wjkgz 所所说的, 数据需要4字节对齐

热点排行