Link to home
Start Free TrialLog in
Avatar of wulf
wulf

asked on

How do I create a from an array?

PIX_PTR is an array of colors(chars) which I should be able to display as a bitmap. The palette I will use is a 16 color palette of user defined colors. I am not going to deal with the palette issue here, but it is important to know that the only colors used are 0-15. I have used the following code to attempt to display the contents of PIX_PTR as a bitmap.

GetClientRect( hWnd, (LPRECT) &rect );
hbmp = CreateBitmap(320, 200, 1, 4, PIX_PTR);

hdc = GetDC(hWnd);
hdcMemory = CreateCompatibleDC(hdc);
hbmpOld = SelectObject(hdcMemory, hbmp);

BitBlt(hdc, 0, 0, 320, 200, hdcMemory, 0, 0, SRCCOPY);

SelectObject(hdcMemory, hbmpOld);
DeleteDC(hdcMemory);

ReleaseDC(hWnd, hdc);
DeleteObject(hbmp);

When the program is run, this code displays nothing. I can get it to display something by using a 1 in place of 4 in parameter 4 of CreateBitmap. Of course the display is monochrome and erroneous, but it does display something. I am not loading any palette information at this time, I plan to work on that after I get PIX_PTR to display something using any colors. I assume there is a predefined palette, default or otherwise.  I have also tried to use CreateBitmapIndirect with no success by using the following settings.

bm.bmType = 0;
bm.bmWidth = 320;
bm.bmHeight = 200;
bm.bmWidthBytes = 256;
bm.bmPlanes = 1;
bm.bmBitsPixel = 4;
bm.bmBits = PIX_PTR;
hbmp = CreateBitmapIndirect(&bm);

The information I can find on "bm"(BITMAP) is wrong or just not available. Do you know what values I should use for bmWidthBytes? What is bmWidthBytes? Since I am using only 16 colors shouldn't bmBits be set to 4?

I have spent a lot of time attempting to make this work, any suggestions you may have would be greatly appreciated.

--Wulf
ASKER CERTIFIED SOLUTION
Avatar of kw040597
kw040597

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of nietod
nietod

CreateBitmap() CAN be used to create color bitmaps.

bmWidthBytes should be 100;  I think that will fix things.  It should be the number of bytes across a single scan line of the bitmap rounded up to an even number.

since you have 200 pixels across and fit two pixels in a byte (4 bit color) you need 100 bytes across.  Since 100 is even, you don't need to round.