Solved

How do I create a from an array?

Posted on 1997-10-22
2
614 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 50 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

What Is Threat Intelligence?

Threat intelligence is often discussed, but rarely understood. Starting with a precise definition, along with clear business goals, is essential.

Join & Write a Comment

This tutorial is about how to put some of your C++ program's functionality into a standard DLL, and how to make working with the EXE and the DLL simple and seamless.   We'll be using Microsoft Visual Studio 2008 and we will cut out the noise; that i…
If you have ever found yourself doing a repetitive action with the mouse and keyboard, and if you have even a little programming experience, there is a good chance that you can use a text editor to whip together a sort of macro to automate the proce…
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 demo shows you how to set up the containerized NetScaler CPX with NetScaler Management and Analytics System in a non-routable Mesos/Marathon environment for use with Micro-Services applications.

757 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

Need Help in Real-Time?

Connect with top rated Experts

21 Experts available now in Live!

Get 1:1 Help Now