• 调用SetDIBits修改位图内容 from http://blog.csdn.net/iamshuke/article/details/5749933


    通过调用SetDIBits直接修改位图数据。下面的示例在黑色背景上画了一个十字。

    1. void CTest5Dlg::OnOK()   
    2. {  
    3.     // TODO: Add extra validation here  
    4.     CClientDC dc(this);  
    5.     CDC memDC;  
    6.     memDC.CreateCompatibleDC(&dc);  
    7.   
    8.     CBitmap bmp;  
    9.     bmp.CreateCompatibleBitmap(&dc, 300, 200);  
    10.     memDC.SelectObject(&bmp);  
    11.   
    12.     BITMAPINFO bmpInfo;  
    13.     bmpInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);  
    14.     bmpInfo.bmiHeader.biWidth = 300;  
    15.     bmpInfo.bmiHeader.biHeight = -200;  
    16.     bmpInfo.bmiHeader.biPlanes = 1;  
    17.     bmpInfo.bmiHeader.biBitCount = 24;  
    18.     bmpInfo.bmiHeader.biCompression = BI_RGB;  
    19.     bmpInfo.bmiHeader.biSizeImage = 0;  
    20.     bmpInfo.bmiHeader.biXPelsPerMeter = 3000;  
    21.     bmpInfo.bmiHeader.biYPelsPerMeter = 3000;  
    22.     bmpInfo.bmiHeader.biClrUsed = 0;  
    23.     bmpInfo.bmiHeader.biClrImportant = 0;  
    24.       
    25.     long nLnBytes = (bmpInfo.bmiHeader.biWidth*3+3)/4*4;  
    26.     BYTE *pData = new BYTE[nLnBytes*abs(bmpInfo.bmiHeader.biHeight)];  
    27.       
    28.     //清成黑色  
    29.     memset(pData,0,nLnBytes*abs(bmpInfo.bmiHeader.biHeight));  
    30.   
    31.     //画一个十字  
    32.     for(int i=10; i<90; i++)  
    33.     {  
    34.         //横线, 黄色  
    35.         pData[50*nLnBytes+i*3+1] = 255; //g  
    36.         pData[50*nLnBytes+i*3+2] = 255; //r  
    37.   
    38.         //竖线, 蓝色  
    39.         pData[i*nLnBytes+50*3] = 255; //b  
    40.     }  
    41.   
    42.     SetDIBits(dc.m_hDC, bmp, 0, abs(bmpInfo.bmiHeader.biHeight), pData, &bmpInfo, DIB_RGB_COLORS);  
    43.   
    44.     delete []pData;  
    45.   
    46.     dc.BitBlt(0, 0, bmpInfo.bmiHeader.biWidth, abs(bmpInfo.bmiHeader.biHeight), &memDC, 0, 0, SRCCOPY);  
    47. }  

     效果图:

  • 相关阅读:
    HDU 2643 Rank:第二类Stirling数
    HDU 4372 Count the Buildings:第一类Stirling数
    HDU 3625 Examining the Rooms:第一类Stirling数
    HDU 3682 To Be an Dream Architect:查重【三维坐标系中点在实数上的映射】
    POJ 3311 Hie with the Pie:TSP(旅行商)【节点可多次经过】
    bzoj 1050 旅行comf
    luogu 3958 奶酪
    luogu 3952 时间复杂度
    luogu 3951 小凯的疑惑
    bzoj 1016 最小生成树计数
  • 原文地址:https://www.cnblogs.com/songtzu/p/2828293.html
Copyright © 2020-2023  润新知