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

很简单的几行代码,但小弟我找不出异常,大家帮小弟我看看吧

2012-03-02 
很简单的几行代码,但我找不出错误,大家帮我看看吧我要达到的效果:通过已有的24位的位图颜色数据,把图片画

很简单的几行代码,但我找不出错误,大家帮我看看吧
我要达到的效果:通过已有的24位的位图颜色数据,把图片画出来(大小为100*40)


C/C++ code
//(1)初始化相关关键代码 unsigned char  rgb_buf[100*40*3] ; //这个内存区呢,里面有很多位图r,g,b值,格式是rgbrgbrgbrgb.... 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) ;  //把图画上去    HBITMAP hOldBitmap = HBITMAP(*mem_bmp);    ::SetBitmapBits(hOldBitmap, sizeof(rgb_buf), rgb_buf );    mem_dc->SelectObject(hOldBitmap) ;    cur_dc->BitBlt(0,0,            100, 40,            mem_dc,             0,0,            SRCCOPY) ;  



问题:图片画出来的乱七八糟的,不是预期的效果,所以,第2步画图出了问题
究竟是哪里呢???大家帮帮我吧

[解决办法]
C/C++ code
    unsigned char  rgb_buf[100*40*4];    for(int i=0; i< 40; i++)    {        for(int j=0; j<100; j++)        {            rgb_buf[i*100*4 +j*4] = 255;            rgb_buf[i*100*4 +j*4+1] = 0;            rgb_buf[i*100*4 +j*4+2] = 0;            rgb_buf[i*100*4 +j*4+3] = 0;        }    }        CDC *pdc = GetDC() ;     CDC memdc;     CBitmap bmp;    CRect rt;        memdc.CreateCompatibleDC(pdc);    srand(time(NULL));    bmp.CreateCompatibleBitmap(pdc, 100, 40) ;     bmp.SetBitmapBits(sizeof(rgb_buf), rgb_buf);    memdc.SelectObject(&bmp);         GetClientRect(&rt);    pdc->BitBlt(rt.left, rt.top, rt.right, rt.bottom, &memdc, 0, 0, SRCCOPY);         memdc.DeleteDC();    ReleaseDC(pdc);
[解决办法]
C/C++ code
unsigned char  rgb_buf[100*40*3] ;unsigned char rgba_buf[100*40*4];for( int i = 0; i < 100 * 40; i ++ ){    for( j = 0; j < 3; j ++ )    {        rgba_buf[ i * 4 + j] = rgb_buf[i * 3 + j];    }    rgba_buf[i* 4 + 3] = 0;  }::SetBitmapBits(hOldBitmap, sizeof(rgba_buf), rgba_buf );
[解决办法]
我今天在仔细检查下
按理说没问题啊,可改成32位的还是乱七八糟的.............

不满你说,我调试的环境,内存只有40多M
所以,对性能要求有些严格,对内存的索取也有控制
这就是我不想增加开销的原因

热点排行