源代码如下:
StretchDIBits(GetDC()->m_hDC,0,0,640,480,
    0,0,m_infoHeader->biWidth,m_infoHeader->biHeight,m_buff,
   (BITMAPINFO *)m_infoHeader,DIB_RGB_COLORS,SRCCOPY);
a.当我的m_buff读入的位图尺寸少于,640*480时,会放大变模糊
b.当m_buff读入位图等于640*480时,正常
c.当m_buff读入位图大于640*480时,出现些怪异的斑纹,特别当m_buff很大时,斑纹更吓人我想解决的问题是:
当m_buff读入位图大于640*480时,也能得到近似b的效果
m_buff读入位图最大可能为2560*1920
谢谢

解决方案 »

  1.   


    SetStretchBltMode(GetDC()->m_hDC,HALFTONE)?
    这个还是不行
      

  2.   


    一定要放在调用StretchDIBits之前。
    还有其他一些插值算法,多尝试一下,不同的图像类型,插值算法的选择是很重要的,总体来说HALFTONE效果比较好,但是不见得总是这样
      

  3.   


    试完了,还是不行
    我试着用CBitmap+CClientDC来写
    m_buff:(得到位图像素数据)
    m_infoHeader:(得到BITMAPINFOHEADER数据)
    下面这段代码有错么?
    CClientDC dc(this);
    CDC cdc;
    cdc.CreateCompatibleDC((CDC*)&dc);
    CBitmap tempBit;
    tempBit.CreateBitmap(m_infoHeader->biWidth,
    m_infoHeader->biWidth,
    m_infoHeader->biPlanes,
    m_infoHeader->biBitCount,
    (void*)m_buff);
    CBitmap* oldBit=(CBitmap*)cdc.SelectObject(&tempBit);
    dc.StretchBlt(0,0,640,480,&cdc,0,0,
    m_infoHeader->biWidth,m_infoHeader->biHeight,
    SRCCOPY);
    cdc.DeleteDC();