VC++ BMP 이미지 작성 및 저장

2272 단어 Windows
     pData ,     。
    char szFileName[32];
    time_t ltime;
    struct tm* pnow;
    HANDLE hFile;
    BYTE *pData = NULL;
    int i, j, n;
    BITMAPFILEHEADER bmfHdr;
    BITMAPINFOHEADER bi;
    DWORD dwBytesWrite;
	int width, height;
	BYTE qrData[MAX_MODULESIZE][MAX_MODULESIZE];
	//    
	width = height = 100;

    if ( width <= 0 || height <= 0 )
        return;

    // allocate memory for data area

    pData = (BYTE*)malloc(width * height * 3);
    if ( pData == NULL )
        return;

    // generate random data
	//        
    srand((unsigned)time(NULL));
    for ( i = 0; i < (int)(width * height * 3); i++)
    {
        pData[i] = 255;
    }

    //initialize the structures

    RtlZeroMemory(&bmfHdr, sizeof(bmfHdr));
    RtlZeroMemory(&bi, sizeof(bi));

    // fill the necessary struct fields of the BITMAPFILEHEADER

    bmfHdr.bfType = 0x4d42; // "BM"

    bmfHdr.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + width * height * 3;
    bmfHdr.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);

    // fill the necessary struct fields of the BITMAPINFOHEADER

    bi.biSize = sizeof(bi);
    bi.biBitCount = 24;
    bi.biHeight = height;
    bi.biWidth = width;
    bi.biCompression = BI_RGB;    
    bi.biPlanes = 1;
    

    /* according current date and time to generate file name, saved in c:\ */
    time(tm_year, pnow->tm_mon, pnow->tm_mday, 
            pnow->tm_hour, pnow->tm_min, pnow->tm_sec);

    // create the bmp file

    hFile = CreateFile(szFileName, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
    if ( hFile == INVALID_HANDLE_VALUE )
    {
        free(pData);
        return;
    }

    // write the BITMAPFILEHEADER

    WriteFile(hFile, &bmfHdr, sizeof(BITMAPFILEHEADER), &dwBytesWrite, NULL);
    // write the BITMAPINFOHEADER

    WriteFile(hFile, &bi, sizeof(BITMAPINFOHEADER), &dwBytesWrite, NULL);
    // write the bmp data

    WriteFile(hFile, pData, width * height * 3, &dwBytesWrite, NULL);
    
    // release resources

    CloseHandle(hFile);
    free(pData);

좋은 웹페이지 즐겨찾기