知道宽度 高度 和每个象素的颜色数据 ,请问怎么显示出来?我的方法是一个个调用SetPixel打点,太慢了能够有什么办法一次吧所有象素显示出来吗 谢谢在线等待

解决方案 »

  1.   

    把这些写到Bitmap里面 然后显示bitmap
      

  2.   

    把这些写到Bitmap里面 然后显示bitmap什么意思?写道CBitmap里吗 可以直接把颜色数据数组赋给CBitmap吗?
      

  3.   

    其实就是想问通过这些知道的数据 
    怎么构建CBitmap 是CreateBitmap吗?
      

  4.   

    SetBitmapBits好像这个函数可以 
    但为什么我显示出来的只有黑白两色呢
      

  5.   

    一定要把颜色表写入bitmapinfo 除非是24位或32位彩色图象
      

  6.   

    是24位图象我是在OnDraw里这样写的 ,为什么出来的图象不对 ,应该是个全红的图片啊?MapWidth = 100;
    MapHeight = 100;typedef struct{
        unsigned char B;
        unsigned char G;
        unsigned char R;
    }CColorData;CColorData * pArray = new CColorData[MAX_WIDTH*MAX_HEIGHT];for (int k=0; k<MapWidth*MapHeight; k++)
    {
        pArray[k].R = 255;
        pArray[k].G = 0;
        pArray[k].B = 0;
    }
    CDC MemDC;
    HBITMAP OldBitmap;
    MemDC.CreateCompatibleDC(pDC);
    CBitmap bitmap;
    bitmap.CreateCompatibleBitmap(pDC, MapWidth, MapHeight);
    bitmap.SetBitmapBits(3*MapWidth*MapHeight, pBits);
    HBITMAP hBitmap = (HBITMAP)bitmap;
    OldBitmap=(HBITMAP)MemDC.SelectObject(hBitmap);
    pDC->BitBlt(0, 0, MapWidth, MapHeight, &MemDC, 0, 0, SRCCOPY);
    MemDC.SelectObject(OldBitmap);
    delete [] pBits;
    出来的图象完全不是红色的 ,怎么回事啊?
      

  7.   

    bm2=new CBitmap;
    bm2->CreateBitmap (cx,cy,1,bitspixel,pBuff);bitspixel一般为32,pBuff为数组4字节
      

  8.   

    bitmap还应该加BITMAPINFO头信息的吧
      

  9.   

    用CreateDIBSection可以创建一个可以直接写的位图,然后把它画到客户区。大概写了一下,希望对你有帮助。#define WIDTHBYTES(bits)    (((bits) + 31) / 32 * 4)void CDrawcolorView::OnDrawColor() 
    {
    // TODO: Add your command handler code here
    HDC hDC=::GetDC(this->m_hWnd); CRect rect;
    GetClientRect(&rect);
    rect.right=WIDTHBYTES(rect.right*8); BITMAPINFO bi;
    void *pBits=NULL; int  nWidth=rect.right;
    int  nHeight=rect.bottom; //写位图文件头
    ZeroMemory(&bi,sizeof(bi));
    bi.bmiHeader.biSize=sizeof(bi.bmiHeader);
    bi.bmiHeader.biHeight=nHeight;
    bi.bmiHeader.biWidth=nWidth;
    bi.bmiHeader.biPlanes=1;
    bi.bmiHeader.biBitCount=24;
    bi.bmiHeader.biCompression=BI_RGB;
    bi.bmiHeader.biSizeImage=3*nWidth*nHeight; HDC hBmpDC=CreateCompatibleDC(hDC);
    //创建一个可以直接写入的位图对像
    HBITMAP hBitmap=CreateDIBSection(hDC,&bi,DIB_RGB_COLORS,&pBits,NULL,0);
    SelectObject(hBmpDC,hBitmap); //将每个像素赋成红色
    BYTE* pSrc=(BYTE*)pBits;
    for(int i=0;i<nHeight;i++)
    {
    for(int j=0;j<nWidth;j++)
    {
    pSrc[i*nWidth*3+j*3]=0x00;
    pSrc[i*nWidth*3+j*3+1]=0x00;
    pSrc[i*nWidth*3+j*3+2]=0xff;
    }
    }
    //复制位图到前台
    BitBlt(hDC,0,0,nWidth,nHeight,hBmpDC,0,0,SRCCOPY); DeleteDC(hBmpDC);
    DeleteObject(hBitmap);
    ::ReleaseDC(this->m_hWnd,hDC);
    }