Quantcast
Channel: CodeGuru Forums - Visual C++ Programming
Viewing all articles
Browse latest Browse all 3026

Is it nessecary to display a array of bytes without converting to HBITMAP

$
0
0
I followed a tutorial to load a bitmap from file and convert it to a array of bytes to access it directly. Now to display the bitmap on screen do I have to convert it to a HBITMAP or can I display it from the array of bytes?

Also the program I am building is a calendar program and I need to know if I can manipulate the bitmaps pixels in the byte array (e.g change color and resize image)

here is the code to load the bitmap

HTML Code:

BYTE* Sprite2::LoadBMP(int* width, int* height, long* size, LPCTSTR bmpfile )
{
        BITMAPFILEHEADER bmpheader;
        BITMAPINFOHEADER bmpinfo;
        DWORD bytesread;

        HANDLE file = CreateFile(bmpfile,GENERIC_READ, FILE_SHARE_READ,
                0, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, 0);
        if(0 == file)
                return 0;

        if(ReadFile ( file, &bmpheader, sizeof( BITMAPFILEHEADER),
                &bytesread, 0 ) == false )
        {
                CloseHandle (file );
                return 0;
        }

        if( ReadFile ( file, &bmpinfo, sizeof ( BITMAPINFOHEADER ),
                &bytesread, 0 ) == false )
        {
                CloseHandle ( file );
                return 0;
        }

        if( bmpheader.bfType != 'MB' )
        {
                CloseHandle( file );
                return 0;
        }

        if( bmpinfo.biCompression != BI_RGB )
        {
                CloseHandle( file );
                return 0;
        }

        if( bmpinfo.biBitCount != 24 )
        {
                CloseHandle( file );
                return 0;
        }

        *width = bmpinfo.biWidth;
        *height = abs (bmpinfo.biHeight);
        *size = bmpheader.bfSize - bmpheader.bfOffBits;

        BYTE* Buffer = new BYTE[ *size ];

        SetFilePointer ( file, bmpheader.bfOffBits, 0, FILE_BEGIN );

        if( ReadFile (file, Buffer, *size, &bytesread, 0 ) == false)
        {
                delete [] Buffer;
                CloseHandle( file );
                return 0;
        }

        CloseHandle( file );
        return Buffer;

}


Viewing all articles
Browse latest Browse all 3026

Trending Articles