Solved

Selecting a palette in 256 color mode

Posted on 1998-08-17
5
299 Views
Last Modified: 2013-11-20
I have a bitmap which is drawn in a specific palette, and would like to draw this bitmap using that palette when my application is using 256 color mode.

I have created a bitmap resource, and used VC++'s resource editor's Load Palette dialog to load my palette. My bitmap looks fine in the resource editor's bitmap display. However, also in the resource editor, my bitmap is flattened to 16 color when I use the bitmap in a dialog resource.

My bitmap is also drawn in 16 colors when that dialog is displayed by my application.

What I have tried:
Please do not answer this question, suggesting that I try any of the following, since I already have.

I have a function that returns an HPALETTE, given a bitmap filename. I use this function to get the palette out of a palette.bmp file I intend to ship with my application. I have then tried calling SelectPalette and RealizePalette from the following callbacks:
  OnInitDialog, OnPaint, OnQueryNewPalette

None of these worked.

A friend told me that when calling LoadBitmap in 256 color mode, that windows automatically reduces the image to 16 colors, so the information is lost. He says the only way to draw the image in the 256 colors is to create the bitmap yourself and realize the palette in its DC, then draw it yourself into the dialog.

I think there must be a better way.

Can you give me an easy solution that will allow me to draw a bitmap into a dialog, using a specific palette that I have access to?

Thanks,
Brett Levine
bl@pobox.com
0
Comment
Question by:circuit
  • 3
  • 2
5 Comments
 
LVL 23

Accepted Solution

by:
chensu earned 100 total points
ID: 1320926
Your friend is right. LoadBitmap converts a DIB to a DDB. Thus, the palette information is lost. Use LoadImage instead and draw it yourself. You need to select and realize the palette in OnPaint, OnQueryNewPalette and OnPaletteChanged. You can find the example code at http://www.codeguru.com/bitmap/index.shtml.
0
 
LVL 7

Expert Comment

by:psdavis
ID: 1320927
> A friend told me that when calling LoadBitmap in 256 color mode, that windows automatically reduces the image to 16 colors

Nah, I do it quite frequently.  Can we see your code?

Phillip

0
 
LVL 7

Expert Comment

by:psdavis
ID: 1320928
If I remember right, and I have some code up at work, we use the FindResource/LoadResource to load the image as data, but not with the LoadImage function.  Chensu (and your friend with full apologies) is correct on that point.

I'll send the code tomorrow, but it's only a combination of those two functions. (Unless I'm overly mistaken (And I'm normally)).

Phillip
0
 
LVL 23

Expert Comment

by:chensu
ID: 1320929
In 16-bit world, we used the FindResource/LoadResource. In Win32, we can use LoadImage to make life easier.
0
 
LVL 7

Expert Comment

by:psdavis
ID: 1320930
You're absolutely right chensu, thanks!
0

Featured Post

Do You Know the 4 Main Threat Actor Types?

Do you know the main threat actor types? Most attackers fall into one of four categories, each with their own favored tactics, techniques, and procedures.

Join & Write a Comment

In this article, I'll describe -- and show pictures of -- some of the significant additions that have been made available to programmers in the MFC Feature Pack for Visual C++ 2008.  These same feature are in the MFC libraries that come with Visual …
Introduction: Dynamic window placements and drawing on a form, simple usage of windows registry as a storage place for information. Continuing from the first article about sudoku.  There we have designed the application and put a lot of user int…
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.
It is a freely distributed piece of software for such tasks as photo retouching, image composition and image authoring. It works on many operating systems, in many languages.

705 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