?
Solved

How do I create a from an array?

Posted on 1997-10-22
2
Medium Priority
?
650 Views
Last Modified: 2013-12-03
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
0
Comment
Question by:wulf
2 Comments
 

Accepted Solution

by:
kw040597 earned 200 total points
ID: 1407785
The CreateBitmap() can be only used to create monochrome bitmap, use CreateDIBitmap() or CreateDIBSection() instead. The relevent structure is BITMAPINFOHEADER.
0
 
LVL 22

Expert Comment

by:nietod
ID: 1407786
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.
0

Featured Post

How to Use the Help Bell

Need to boost the visibility of your question for solutions? Use the Experts Exchange Help Bell to confirm priority levels and contact subject-matter experts for question attention.  Check out this how-to article for more information.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article shows a few slightly more advanced techniques for Windows 7 gadget programming, including how to save and restore user settings for your gadget and how to populate the "details" panel that is displayed in the Windows 7 gadget gallery.  …
This article surveys and compares options for encoding and decoding base64 data.  It includes source code in C++ as well as examples of how to use standard Windows API functions for these tasks. We'll look at the algorithms — how encoding and decodi…
This is Part 3 in a 3-part series on Experts Exchange to discuss error handling in VBA code written for Excel. Part 1 of this series discussed basic error handling code using VBA. http://www.experts-exchange.com/videos/1478/Excel-Error-Handlin…
This video shows how to quickly and easily deploy an email signature for all users in Office 365 and prevent it from being added to replies and forwards. (the resulting signature is applied on the server level in Exchange Online) The email signat…

862 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question