|
I'm having trouble when I export an image as a bitmap on a 16-bit color system (seems to work well under 24 or 32 bit color). The strange thing is that when I bitblt the image to the screen, it looks right but when I save it to a file, the colors are completely off (I mean completely) though the image is not distorted in any other way. I'm pretty sure this has to do with my lack of understanding of bitmaps and 16 vs 32 bit color.
How is each pixel represented. I'm guessing it must be an index, not an actual color value since there are only 2 bytes available. Here's how I build the bitmap header structure:
<br />
BITMAP bm; <br />
bitmap->GetBitmap(&bm);<br />
bm.bmBits = new RGBQUAD[640*480];<br />
bitmap->GetBitmapBits (sizeof(RGBQUAD)*(640*480), bm.bmBits);<br />
<br />
BITMAPINFO BitInfo;<br />
ZeroMemory(&BitInfo, sizeof(BITMAPINFO));<br />
BitInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); <br />
BitInfo.bmiHeader.biBitCount = bm.bmBitsPixel;<br />
BitInfo.bmiHeader.biHeight = -bm.bmHeight;<br />
BitInfo.bmiHeader.biWidth = bm.bmWidth;<br />
BitInfo.bmiHeader.biPlanes = bm.bmPlanes;<br />
BitInfo.bmiHeader.biSizeImage = 0;<br />
BitInfo.bmiHeader.biCompression = BI_RGB;<br />
<br />
BITMAPFILEHEADER BmHdr; <br />
BmHdr.bfType = 0x4d42;
BmHdr.bfSize = (((3 * bm.bmWidth + 3) & ~3) * bm.bmHeight) + sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);<br />
<br />
BmHdr.bfReserved1 = BmHdr.bfReserved2 = 0;<br />
BmHdr.bfOffBits = (DWORD) sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER); <br />
BitInfo.bmiHeader.biCompression = 0;<br />
Does anyone have any ideas?
Karim Shehade
http://www.iwonderdesigns.com
|
|
|
|
|
Karim Shehadeh wrote:
How is each pixel represented
2 bytes per pixel: _rrrrrgggggbbbbb (5-5-5) or rrrrrggggggbbbbb (5-6-5)
no palette.
how are you viewing the BMPs ?
Cleek | Image Toolkits | Thumbnail maker
|
|
|
|
|
Chris Losinger wrote:
how are you viewing the BMPs ?
I'm viewing the bitmaps via a photoshop and the built in preview app in WinXP.
Karim Shehade
http://www.iwonderdesigns.com
|
|
|
|
|
the only thing that looks even a little off is the bmSize calculation, because that looks like it assumes 32 bit pixels. but that shouldn't affect the colors - most programs don't care about that value.
what does your BITMAPINFOHEADER struct look like after you've filled it in ?
-c
Cleek | Image Toolkits | Thumbnail maker
|
|
|
|
|
Thanks again for all your help with this. Here's the bitmapinfoheader structure just before it's written along with everything else, to disk:
- BitInfo.bmiHeader {...}
biSize 40
biWidth 320
biHeight -260
biPlanes 1
biBitCount 16
biCompression 0
biSizeImage 0
biXPelsPerMeter 0
biYPelsPerMeter 0
biClrUsed 0
biClrImportant 0
Regards,
Karim Shehade
http://www.iwonderdesigns.com
|
|
|
|
|
|
No, I haven't though I did see it while I was perusing the docs. I'll give it a shot. Thanks again for your help.
Karim
Karim Shehade
http://www.iwonderdesigns.com
|
|
|
|
|
Hi all,
I wanna create a program that startup each time the pc started..which api i can used?
|
|
|
|
|
See MSDN articles Q179365 and Q137367.
"One must learn from the bite of the fire to leave it alone." - Native American Proverb
|
|
|
|
|
to have programs start when the computer starts up u need to edit the registry
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
or
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
|
|
|
|
|
I thought these entries required the user to first login. I think one would have to go the service route (on supported Win OSs) in order to have an application start on boot up.
/ravi
My new year's resolution: 2048 x 1536
Home | Music | Articles | Freeware | Trips
ravib(at)ravib(dot)com
|
|
|
|
|
Ravi Bhavnani wrote:
I thought these entries required the user to first login.
HKEY_CURRENT_USER would but HKEY_LOCAL_MACHINE exists even when no one is logged in.
Ravi Bhavnani wrote:
I think one would have to go the service route (on supported Win OSs) in order to have an application start on boot up.
Not necessarily.
"One must learn from the bite of the fire to leave it alone." - Native American Proverb
|
|
|
|
|
DavidCrow wrote:
HKEY_LOCAL_MACHINE exists even when no one is logged in.
True.
But if I'm not mistaken, a "Run" entry in the HKEY_LOCAL_MACHINE subtree causes the application to start after any user logs in, as opposed to a corresponding entry for a specific user in the HKEY_USERS subtree which causes the app to only start when that user logs in. Regardless, the user has to first login.
<aside>
I believe this mechanism is used by installers that ask "Do you want to install this program for all users or just yourself?".
</aside>
/ravi
My new year's resolution: 2048 x 1536
Home | Music | Articles | Freeware | Trips
ravib(at)ravib(dot)com
|
|
|
|
|
Ravi Bhavnani wrote:
But if I'm not mistaken, a "Run" entry in the HKEY_LOCAL_MACHINE subtree causes the application to start after any user logs in...Regardless, the user has to first login.
Not so. I just verified this and without logging in to the machine, the applications in HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run are indeed started.
[edit]
The jury is still out on this one. I'll keep looking...
[/edit]
"One must learn from the bite of the fire to leave it alone." - Native American Proverb
|
|
|
|
|
DavidCrow wrote:
without logging in to the machine, the applications in HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run are indeed started.
That's amazing. It seems to work exactly as I described on my Win XP Home SP1 box. I confirmed this by adding a HKEY_LOCAL_MACHINE\... entry to this test app:
#include "stdafx.h"
#include "time.h"
int main(int argc, char* argv[])
{
time_t tmNow;
time (&tmNow);
char szFilespec [255];
sprintf (szFilespec, "C:\\%d.txt", tmNow);
FILE* fp = fopen (szFilespec, "w");
fclose (fp);
return 0;
} and rebooting and logging in a few seconds later. As I expected, there was only one file (C:\1124224887.txt ) created. This matches Microsoft's documentation[^] of these keys.
/ravi
My new year's resolution: 2048 x 1536
Home | Music | Articles | Freeware | Trips
ravib(at)ravib(dot)com
|
|
|
|
|
Ravi Bhavnani wrote:
...and rebooting and logging in a few seconds later.
But the question is does your test application run if you don't log in?
"One must learn from the bite of the fire to leave it alone." - Native American Proverb
|
|
|
|
|
DavidCrow wrote:
does your test application run if you don't log in?
No, because if it did, there would have been 2 files created - once when the system rebooted and once after I logged in.
/ravi
My new year's resolution: 2048 x 1536
Home | Music | Articles | Freeware | Trips
ravib(at)ravib(dot)com
|
|
|
|
|
why would there have to be two?
if its started on startup it wouldnt create another process of itself for the user logging in. would it?
|
|
|
|
|
I booted the system at 2:30pm and logged in at 2:35pm. The file was timestamped 2:35pm. My point was, if the application ran on boot up, there would have been 2 files - one timestamped 2:30pm and the other 2:35pm. I also confirmed that the file is created every time I login.
/ravi
My new year's resolution: 2048 x 1536
Home | Music | Articles | Freeware | Trips
ravib(at)ravib(dot)com
|
|
|
|
|
|
Did you mean RunServices instead of Run ?
/ravi
My new year's resolution: 2048 x 1536
Home | Music | Articles | Freeware | Trips
ravib(at)ravib(dot)com
|
|
|
|
|
Ravi Bhavnani wrote:
Did you mean RunServices instead of Run?
No.
"One must learn from the bite of the fire to leave it alone." - Native American Proverb
|
|
|
|
|
Ravi Bhavnani wrote:
But if I'm not mistaken, a "Run" entry in the HKEY_LOCAL_MACHINE subtree causes the application to start after any user logs in, as opposed to a corresponding entry for a specific user in the HKEY_USERS subtree which causes the app to only start when that user logs in. Regardless, the user has to first login.
That's the way I've taken it to work, I always have to log in of HKLM\...\Run to take effect.
One thing I suggest doing though, is use Winlogon Notification Packages (assuming you're programming for an NT-based version of windows), you can listen to startup/shutdown/login/logoff and other events.
Check:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/secauthn/security/winlogon_notification_packages.asp
HTH
|
|
|
|
|
Thanks for the info, but you may want to post a reply to the original author of the thread.
/ravi
My new year's resolution: 2048 x 1536
Home | Music | Articles | Freeware | Trips
ravib(at)ravib(dot)com
|
|
|
|
|
Good point!
|
|
|
|