none
CreateDIBSection 位图显示 RRS feed

  • 问题

  • 以下是我的代码:

     BITMAPINFO bmi;
     bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
     bmi.bmiHeader.biBitCount = 8;
     bmi.bmiHeader.biPlanes = 1;
     bmi.bmiHeader.biWidth = 152;
     bmi.bmiHeader.biHeight = -152;
     bmi.bmiHeader.biCompression = BI_RGB;
     bmi.bmiHeader.biSizeImage = 152*152*8;
     bmi.bmiHeader.biXPelsPerMeter = 0;
     bmi.bmiHeader.biYPelsPerMeter = 0;
     bmi.bmiHeader.biClrUsed = 0;
     bmi.bmiHeader.biClrImportant = 0;

    /* for (int k=0; k<256; k++)
     { 
      BYTE byte = k;

      bmi.bmiColors[k].rgbBlue = k;
      bmi.bmiColors[k].rgbRed = k;
      bmi.bmiColors[k].rgbGreen = k;
      bmi.bmiColors[k].rgbReserved = 0;
     }
    */
     HDC hDC = ::GetDC(this->m_hWnd);
     HDC hdcMem;
     hdcMem = CreateCompatibleDC(hDC);

     BYTE *pix;

     HBITMAP hBit = CreateDIBSection(hdcMem, &bmi, DIB_RGB_COLORS, (void**)&pix, 0, 0);
     if (NULL == hBit)
     {
      AfxMessageBox("cuowu");
      return ;
     }
     memset(pix, 0x05, 152*152);              //问题1
    // for (int k=0; k<152*152; k++)          //问题2
    //  *(pix + k) = photodata[k];

     SelectObject(hdcMem, hBit);

     SetStretchBltMode(hDC, HALFTONE);
     StretchBlt(hDC, 0, 0, 300, 300, hdcMem, 0, 0, 152, 152, SRCCOPY);
     
     DeleteDC(hDC);

    问题1:当memset(pix, 0x05, 152*152);编译运行的时候,显示区域为黑色,改变0x05为其他的值,仍是黑色,    改为 memset(pix, 0x00, 152*152);时候,区域为银灰色。不是数值越高,亮度越高吗,现在怎么会这样?

    问题2:photodata是一个十六进制字符数组,每八位为一个像素,但是我用问题2处的代码进行赋值之后,显示出来的大部分区域是黑色,只有零星的一些杂色,根本不是一幅我要的图像。怎么回事?

    请高手帮助解决一下,万分感激。谢谢。

    2010年5月7日 3:53

全部回复