我是想知道是否就是简单的用setpix写点来实现? 如果是,这个实现过程中是否存在酸法问题,也就是速度快慢问题?

解决方案 »

  1.   

    用SetPixcel()显然效率太低,显示位图通常是用这样一组函数:
    BitBlt,StretchBlt,StretchDIBits。
    参数中要求有一个BITMAPINFOHEADER,你要根据图像的实际大小来设置。
    这里有个读取位图并显示的例子,可以参考:
    http://www.yangning.com/cgi-bin/topic.cgi?forum=1&topic=82&show=0
      

  2.   

    dc.BitBlt(r.left,r.top,bitSize.bmWidth,bitSize.bmHeight,&memdc,0,0,SRCCOPY);
      

  3.   

      你是说将解出的数据,组织成BYTE bits[] ,然后创建HBITMAP,再进行BitBlt显示?
      

  4.   


     我现在可以用setpixel显示了
      

  5.   

    如果是24位的图像
    //初始化信息头
    memset(&bmih,0,sizeof(bmih));
    bmih.biSize=sizeof(bmih);
    bmih.biHeight=m_LastPos.y-m_FirstPos.y;
    bmih.biWidth=m_LastPos.x-m_FirstPos.x;
    bmih.biSizeImage=height*width*3+ZeroWidth*bmih.biHeight;
    bmih.biBitCount=24;
    bmih.biPlanes=1;
    bmih.biXPelsPerMeter=3780;SetDIBitsToDevice(pDC->m_hDC,
    0,0, m_bmih.biWidth,m_bmih.biHeight,
    0,0,
    0,m_bmih.biHeight,
    m_pImgData,
    (BITMAPINFO*)&m_bmih,
    DIB_RGB_COLORS);
      

  6.   

    sorry!
    还没改好呢,不小心就回复了,下面的代码才是正确的
    BITMAPINFOHEADER bmih;
    int height=XXX;
    int width=XXX;
    BYTE* pImgData=XXX;//你只需要修改上面的三个变量即可
    int ZeroWidth=(((width*24) + 31) / 32 * 4)-width*3;
    memset(&bmih,0,sizeof(bmih));
    bmih.biSize=sizeof(bmih);
    bmih.biHeight=height;  //
    bmih.biWidth=width;    //
    bmih.biSizeImage=height*width*3+ZeroWidth*bmih.biHeight;
    bmih.biBitCount=24;
    bmih.biPlanes=1;
    bmih.biXPelsPerMeter=3780;SetDIBitsToDevice(m_memDC->m_hDC,
    0,0,
    m_bmih.biWidth,m_bmih.biHeight,
    0,0,
    0,m_bmih.biHeight,
    pImgData,
    (BITMAPINFO*)&m_bmih,
    DIB_RGB_COLORS);当然上面的代码只能对24位图操作,如是其它的图,需要作相应的变动